MQ学习记录02

JMS消息模型

在Jms标准中,有两种消息模型P2P(Point to Point),Publish/Subscriber。
P2P模式中包含sender,queue和receiver,即发送者,队列和接受者,该模式下,一个消息只能发送到一个队列,也只能被一个消费者消费。队列会保存消息直到消息被消费或者过期
P2P特点

  1. 每个消息只能被一个消费者消费,消费后就会消失(多对一的关系,一个消息一个消费者,一个消费者多个消息)
  2. 发送者和接受者之间没有依赖性,发送者只管将消息发送到队列,不关心是否有消费者等待消费
  3. 接受者接受消息,需要向发送者发送确认


Pub/Sub模式中包含publisher,subscriber和topic,即发布者,订阅者和主题
Pub/Sub特点

  1. 每个消息可以被多个消费者消费(多对多的关系)
  2. 发布者和订阅者之间存在依赖关系,只有订阅某个Topic,才能收到发布者的消息,即订阅者必须先创建才能收到消息
  3. 为了消费消息,订阅必须保证运行状态

但是持久化的订阅者,即使未能激活,也能在开启的时候接受到消费者的消息(即订阅,但不是不用在线)

Pub/Sub模式测试

代码地址https://gitee.com/studycsw/pure-java
producer类
subscriber类
结果
这里显示:在subscriber未启动的时候发送一条,启动之后在发送一条,很显然subscriber只监听到了后一条

在mq中的结果

ActiveMq中从左到右的解读是:有1个消费者,发了两条消息,一条消息被消费

持久化的订阅者

消费者端的改变

先订阅主题

查看mq
有下线的持久化订阅者(offline Durable Topic Subscribers)

在开启生产者

再次开启订阅者

可以接受到消息

mq中也是正常显示

ActiveMq中的事务和签收

事务

在生产者中开启事务:
开启事务未提交

有一个消费者等待消息
在未提交的时候是不会将消息存储到MQ中,只有生产者提交,消费者才能消费消息
开启事务提交


事务成功被接收

在消费中开启事务:
在消费者中开启事务
结果
第一次启动能够拿到消息,未提交
第一次启动
第二次启动时,仍让能够拿到消息
第二次启动
在mq中就会显示消息未被消费

在消费中开启事务时如果不提交,会被消费者重复消费

签收

签收是相对于消费者的,在消费者端开启ClientAcknowledge时,只有对消息进行acknowledge,才能签收消息,否则会重复消费
生产者代码

消费者启动后的效果,但是再次启动消费者仍然会消费到消息

从mq中可以看到,尽管消费者接收到消息,但是没有进行确认的情况下,仍然会有消息保存在mq中

签收和事务的关系

  • 事务会话中,当一个事务被成功提交则消息被自动签收
  • 如果事务回滚,则消息会被再次发送
  • 非事务回话中,消息何时被确认取决于创建会话时的确认模式(acknowledgement mode)

站在巨人的肩膀上

《阿里技术手册》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值