发送队列java_Java操作队列

Java操作队列

常见的几种模式:

fd9d069988ee8e0ab1fc1b483e09326e.png

1 简单队列simple

模型:(p + 队列 + c)

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

红色:消息队列

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

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

74f0464f3a0181848f9a0d71dbbe7237.png

创建maven工程

导入pomjar文件

197ab02f7e3819db76de687e370e526f.png

步骤:

a:获取MQ链接的工具类

1f4a07a1686c437bb6e032175f5164c9.png

创建生产者类发送消息:

7ba93f8ea69bfb78139102140b183f67.png

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

f6887431cae34c88fcd3f125445c1cd5.png

5d30a017975171b9844d7f9309ab53d0.png

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

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

840bd4cb21cb36362705a92858af5b40.png

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

12aa6412af4e91cd7f258d0921c73bb1.png

2 工作队列work    queue

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

3983764aa76558fd2dff2315f13a5279.png

轮询分发(round ribon)

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

69e237c965550f24bc7dbd9735ab912a.png

消费者1消费消息:

928ebe7b5bc6e2436b49b18cafaa5d06.png

消费者2消费消息:

修改睡眠时间为1000ms.

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

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

公平分发(fair dipatch)

3008575dc407dc9e11ac37afc26b9f76.png

2361a6bd651fecdde298c28596e0edfa.png

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

修改生产者代码:

b489227890d11398869e8be0ba0dbd1c.png

修改消费者代码:

954f8c3866a7ee013217fc33a636f99e.png

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

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

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

b61e4df65c42c050b12236eec0b6d801.png

持久化durable:

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

ffa90230d69d98b21bcf0c7aef1c0d59.png

3 订阅模式

模型

54b4158440aac73f42c53adda29fe675.png

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

462874adfe95038bea5caec7720ff0d5.png

交换机

3b37f42ff6c97be88825e42f703f9d97.png

5a24403c878e0b60747a0e14619fbec3.png

"":匿名转发。

0bf6fb1f69779f0936a98fd9146ef55a.png

Fanout:不处理路由键

124c2928a65f61a5c9261a386f972c26.png

bc617d05e1272ed8ffd531b846ccc68c.png

代码用例

编写生产者:

3255e14afbe8b29903910404b7b7a63e.png

55f8e8d3f5e69190d2da316327c257ab.png

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

2f161378621bc9313d24b56a06639a5b.png

创建消费者类:

edb617149472aca5f32b10e6c835989d.png

b31be07b7f994767e7088baf7bbb0e5a.png

在web控制台可以见到:

90f6073d37966bdfbd3dcf6e0f7afb9f.png

4 Direct:处理路由键的模式

a876472034b95a38cb86b0a17d6a3a59.png

bae32b0951a2aa8fbd28938fc525815f.png

代码用例 生产者:

b0d72ba89b2993af61690cab09d982d4.png

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

5497514a0fa68d9476764fdb4ec601a8.png

f90c364a2e9465c8c9512521c2a272f8.png

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

b5561a53cb03834695a974a892a5e7dd.png

e004a0b708696dd55643e85d076b2cb8.png

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

5 Topics 模式

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

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

*:匹配一个。(少用)

5916f2b75218826ba5b322550ee2df32.png

185846f28e7f6f8ea683673efa2a0607.png

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

生产者:

1a720f0100c4c2ec746808b961d1ea60.png

消费者1:

7908002a0dd81bec5c8ce0e2c5631b77.png

消费者2:

046ec8588a5c44585891ec85af4b6e5f.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值