JMS 规范以及消息特性(二)

消息队列比较

在这里插入图片描述

消息的签收

非事务的签收有三种

1)自动签收 Session.AUTO_ACKNOWLEDGE
2)手动签收 Session.CLIENT_ACKNOWLEDGE
3)允许重复消息 Session.DUPS_OK_ACKNOWLEDGE ???这个我没有验证通过
在这里插入图片描述
对生产者而言,如果开启了事务,则签收机制可以随便选择,事务的优先级高于签收机制
验证1:生产者未开启事务,采用自动签收的方式将消息发送到服务器
消费者采用手动签收,发现消息可以重复消费。
消息发送到服务器,运行消费者程序,消息没有被消费掉
在这里插入图片描述

在这里插入图片描述
开启消息签收机制后,消息不能重复消费
在这里插入图片描述

事务模式下的签收

生产者开启事务,签收模式为自动签收,将消息发送到服务器
在这里插入图片描述

在这里插入图片描述

消费者开启事务,采用手动签收模式,但是消息没有使用ack机制。
消息仍然被消费掉
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

验证:
生产者开启事务,签收模式为自动签收,将消息发送到服务器;
消费者开启事务,采用手动签收模式,消息使用ack机制。但是没有commit。消息能被重复消费在这里插入图片描述
在这里插入图片描述
结论:
在事务性会话中,当一个事物被成功提交则消息被自动签收。如果事物回滚,则消息会被再次传送。
非事物性会话中,消息何时被确认取决于创建会话时的应答模式(acknowledgement)

猜你喜欢

转载自blog.csdn.net/weixin_39472101/article/details/115263978