Java操作队列

常见的几种模式:

 

1 简单队列simple

模型:(p + 队列 + c)

P:生产者producer,将消息发送到队列

红色:消息队列

C:消费者consumer,从队列消费消息

 

生产真的速度一般大于消费者的速度(因为消费者需要和业务计算相结合)

创建maven工程

导入pomjar文件

 

步骤:

a:获取MQ链接的工具类

 

创建生产者类发送消息:

再回到web控制台可以看到刚才的操作:

 

C: 创建一个消费者类消费消息

用的是旧的版本的(3.4)队列API

 

用最新的队列API(基于事件的监听):

 

 

 

2 工作队列work    queue

一个生产者对应多个消费者!

 

轮询分发(round ribon)

编写生产者类生产50条信息:

 

 

消费者1消费消息:

 

消费者2消费消息:

修改睡眠时间为1000ms.

 

结果会看到消费者1和2都一人一个消息,均分消费了这50条消息。

这个是Rabbitmq的轮询分发(round-robin)。

 

 

公平分发(fair dipatch)

关闭自动应答asc,改为手动

 

修改生产者代码:

 

修改消费者代码:

 

运行的结果会看到睡眠2000ms的消费者消费的消息明显少于睡眠1000ms的消费者

 

 

消息应答ack,和消息持久化durable

消息应答主要是防止消费者挂了之后丢失数据。

 

持久化durable:

 

消息的持久化主要是为了防止rabbitmq服务器挂了之后消息丢失。

 

 

3 订阅模式

 

模型

X:交换机,路由器。需要绑定到队列。

交换机

 

 

 

"":匿名转发。

Fanout:不处理路由键

 

代码用例

编写生产者:

运行之后可以在web控台看到多了一个exchange:

 

创建消费者类:

在web控制台可以见到:

 

 

 

 

 

4 Direct:处理路由键的模式

 

代码用例 生产者:

 

 

消费者1(单个路由key):

 

消费者2(多个路由key):

 

启动消费者1和2之后,再发送key为error的消息,消费者1和2都能消费该消息

 

5 Topics 模式    

 

将路由键和某种主题模式匹配(采用通配符的方式)

#:匹配一个或者多个的情况(常用)

*:匹配一个。(少用)

 

 

 

代码用例:发布商品的增删改查

生产者:

消费者1:

 

消费者2:

 

 

 

Java操作队列的更多相关文章

  1. RabbitMQ(二):Java 操作队列

    1. 简单模式 模型: P:消息的生产者 队列:rabbitmq C:消息的消费者 获取 MQ 连接 public static Connection getConnection() throws I ...

  2. atitit. java queue 队列体系and自定义基于数据库的队列总结o7t

    atitit. java queue 队列体系and自定义基于数据库的队列总结o7t 1. 阻塞队列和非阻塞队列 1 2. java.util.Queue接口, 1 3. ConcurrentLink ...

  3. lesson2:java阻塞队列的demo及源码分析

    本文向大家展示了java阻塞队列的使用场景.源码分析及特定场景下的使用方式.java的阻塞队列是jdk1.5之后在并发包中提供的一组队列,主要的使用场景是在需要使用生产者消费者模式时,用户不必再通过多 ...

  4. Java消息队列-Spring整合ActiveMq

    1.概述 首先和大家一起回顾一下Java 消息服务,在我之前的博客<Java消息队列-JMS概述>中,我为大家分析了: 消息服务:一个中间件,用于解决两个活多个程序之间的耦合,底层由Jav ...

  5. java 数据结构 队列的实现

    java 数据结构队列的代码实现,可以简单的进行入队列和出队列的操作 /** * java数据结构之队列的实现 * 2016/4/27 **/ package cn.Link; import java ...

  6. 并发编程(九)—— Java 并发队列 BlockingQueue 实现之 LinkedBlockingQueue 源码分析

    LinkedBlockingQueue 在看源码之前,通过查询API发现对LinkedBlockingQueue特点的简单介绍: 1.LinkedBlockingQueue是一个由链表实现的有界队列阻 ...

  7. java操作mongodb(连接池)(转)

    原文链接: java操作mongodb(连接池) Mongo的实例其实就是一个数据库连接池,这个连接池里默认有10个链接.我们没有必要重新实现这个链接池,但是我们可以更改这个连接池的配置.因为Mong ...

  8. java阻塞队列与非阻塞队列

    在并发编程中,有时候需要使用线程安全的队列.如果要实现一个线程安全的队列有两种方式:一种是使用阻塞算法,另一种是使用非阻塞算法. //使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入 ...

  9. 细说并发5:Java 阻塞队列源码分析(下)

    上一篇 细说并发4:Java 阻塞队列源码分析(上) 我们了解了 ArrayBlockingQueue, LinkedBlockingQueue 和 PriorityBlockingQueue,这篇文 ...

随机推荐

  1. [troubleshoot][automake] automake编译的时候发生死循环

    在某台特有设备上,编译dssl工程时,竟然发生了死循环. https://github.com/tony-caotong/libdssl 错误日志如下: checking zlib.h presenc ...

  2. Flink - FlinkKafkaProducer010

    https://ci.apache.org/projects/flink/flink-docs-release-1.3/dev/connectors/kafka.html 使用的方式, DataStr ...

  3. CSDN论坛 > Delphi > VCL组件开发及应用 DBLookupComboBox用法

    (1)DataSource属性    该属性用于连接要编辑数据的主表数据源(2)DataField属性    该属性用于指定要编辑的数据字段名(3)ListSource属性    .    该属性用于 ...

  4. SQL instr()函数的格式

    格式一:instr( string1, string2 )    /   instr(源字符串, 目标字符串) 格式二:instr( string1, string2 [, start_positio ...

  5. IDEA指定启动JDK版本

    使用场景: 开发人员在自己的机器上可能装了多个版本的JDK,但是在环境变量中只能配置一个 JAVA_HOME ,so你的IDEA Eclipse 可能因为你在 JAVA_HOME 配置JDK1.8 以 ...

  6. SVN安装部署

    svn安装版本用的是1.8 SVN属于功能性软件,yum安装即是最佳实践. 安装svn yum install subversion 检查svn是否安装完毕 [root@mysql ~]# rpm - ...

  7. react native获取屏幕的宽度和高度

    var Dimensions = require('Dimensions'); var {width,height} = Dimensions.get("window");//第一 ...

  8. RestFramework自定制之认证和权限、限制访问频率

    认证和权限 所谓认证就是检测用户登陆与否,通常与权限对应使用.网站中都是通过用户登录后由该用户相应的角色认证以给予对应的权限. 权限是对用户对网站进行操作的限制,只有在拥有相应权限时才可对网站中某个功 ...

  9. what's the python之自定义模块和包

    模块自定义 上节说了有关模块的知识,当时所说的模块都是内置模块,现在来看自己定制的模块,即模块也可以自定义. 模块的自定义就是指写一段python文件,一般情况下里面包含了可执行的语句和函数的定义,其 ...

  10. Python3学习之路~8.1 socket概念及参数介绍

    一 socket介绍 TCP/IP 基于TCP/IP协议栈的网络编程是最基本的网络编程方式,主要是使用各种编程语言,利用操作系统提供的套接字网络编程接口,直接开发各种网络应用程序. socket概念 ...