Java操作队列
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操作队列的更多相关文章
- RabbitMQ(二):Java 操作队列
1. 简单模式 模型: P:消息的生产者 队列:rabbitmq C:消息的消费者 获取 MQ 连接 public static Connection getConnection() throws I ...
- atitit. java queue 队列体系and自定义基于数据库的队列总结o7t
atitit. java queue 队列体系and自定义基于数据库的队列总结o7t 1. 阻塞队列和非阻塞队列 1 2. java.util.Queue接口, 1 3. ConcurrentLink ...
- lesson2:java阻塞队列的demo及源码分析
本文向大家展示了java阻塞队列的使用场景.源码分析及特定场景下的使用方式.java的阻塞队列是jdk1.5之后在并发包中提供的一组队列,主要的使用场景是在需要使用生产者消费者模式时,用户不必再通过多 ...
- Java消息队列-Spring整合ActiveMq
1.概述 首先和大家一起回顾一下Java 消息服务,在我之前的博客<Java消息队列-JMS概述>中,我为大家分析了: 消息服务:一个中间件,用于解决两个活多个程序之间的耦合,底层由Jav ...
- java 数据结构 队列的实现
java 数据结构队列的代码实现,可以简单的进行入队列和出队列的操作 /** * java数据结构之队列的实现 * 2016/4/27 **/ package cn.Link; import java ...
- 并发编程(九)—— Java 并发队列 BlockingQueue 实现之 LinkedBlockingQueue 源码分析
LinkedBlockingQueue 在看源码之前,通过查询API发现对LinkedBlockingQueue特点的简单介绍: 1.LinkedBlockingQueue是一个由链表实现的有界队列阻 ...
- java操作mongodb(连接池)(转)
原文链接: java操作mongodb(连接池) Mongo的实例其实就是一个数据库连接池,这个连接池里默认有10个链接.我们没有必要重新实现这个链接池,但是我们可以更改这个连接池的配置.因为Mong ...
- java阻塞队列与非阻塞队列
在并发编程中,有时候需要使用线程安全的队列.如果要实现一个线程安全的队列有两种方式:一种是使用阻塞算法,另一种是使用非阻塞算法. //使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入 ...
- 细说并发5:Java 阻塞队列源码分析(下)
上一篇 细说并发4:Java 阻塞队列源码分析(上) 我们了解了 ArrayBlockingQueue, LinkedBlockingQueue 和 PriorityBlockingQueue,这篇文 ...
随机推荐
- day0320 时间模块 collection模块
一. TIME模块 python提供了一个time和calendar模块可以用于格式化日期和时间. 时间间隔一秒为单位. 每个时间戳都以1970年1月1日午夜经过多长时间来表示. 1.时间戳 函数ti ...
- ms sql server,oracle数据库实现拼接一列的多行内容
项目中要将查询出的一列的多行内容拼接成一行,如下图:ypmc列. ms sql server: 网上查到相关资料如下:http://blog.csdn.net/rolamao/article/deta ...
- quartz定时任务cron表达式详解
引用:https://www.cnblogs.com/lazyInsects/p/8075487.html cron表达式用于配置cronTrigger的实例.cron表达式实际上是由七个子表达式组成 ...
- PyCharm 常用习惯设置
1.pycharm改变选中行时改行的颜色和光标所在行的颜色 1.是光标所在行的背景颜色,写代码,每写到这一行,就会是这种颜色,所以尽量改成和你代码背景颜色相近的 2.应该是旁边行号所在背景颜色 3.是 ...
- bug:*** Collection <__NSArrayM: 0x1c444d440> was mutated while being enumerated.
崩溃提示:Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <CAL ...
- NOIP初赛知识点
http://www.doc88.com/p-9982181637642.html 连载中…… (一)八大排序算法 下面这张表摘自博客http://blog.csdn.net/whuslei/arti ...
- MySQL Community Server 8.0.11下载与安装配置
一.下载 1.选择合适的安装包,我在这里下载的是目前最新的安装包,8.0.11,而且我选择下载的是解压版的,安装版的话,安装会比较麻烦. MySQL Community Server下载链接:http ...
- hdu1240/poj2225 BFS广搜的再理解
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/guodongxiaren/article/details/37756347 原题地址 pid=124 ...
- wx鼠标拖动事件
#coding:UTF- import wx app = wx.App() def dragEVT(event): if event.ButtonDown(): panel1.SetPosition( ...
- 在function module 中向数据库插入数据
http://www.sapjx.com/abap-function-module.html 1: 应该在function module 中向数据库插入数据