博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ActiveMQ broker和客户端之间的确认
阅读量:4548 次
发布时间:2019-06-08

本文共 1089 字,大约阅读时间需要 3 分钟。

生产者发送消息:producer ---------> broker

broker返回确认:broker ---------> producer

生产者发送同步消息,broker会返回Response;发送异步消息,broker不会返回确认;满足一定条件时,broker会返回ProducerAck:

final boolean sendProducerAck = !message.isResponseRequired() && producerInfo.getWindowSize() > 0                && !context.isInRecoveryMode();

 

broker 分发消息:broker ---------> consumer

消费者返回确认: consumer ---------> broker

如果消息被正常处理掉,consumer返回 STANDARD_ACK_TYPE 的 MessageAck,如果消息没有被正常处理,且超过了客户端重新投递次数,consumer则返回 POSION_ACK_TYPE 的 MessageAck。在收到 MessageAck 后,broker 才会删除消息。

通常我们使用 ActiveMQ,会这样创建 Session,设置为自动确认:

ActiveMQSession session = (ActiveMQSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

假定存在队列 TEST.FOO,它有1个消费者consumer1,1 个生产者producer1,当producer1向队列发送1条消息,broker 把这条消息分发给consumer1,如果配置自动确认,consumer进程会自动发送确认,broker收到确认后会删除消息。

反之如果配置为CLIENT_ACKNOWLEDGE,则需要手动确认,即显式调用代码:

consumer.acknowledge();

如果consumer1收到消息后,并不调用acknowledge(),即不发送消息确认,broker 也一直会保存消息。

 

client 和 broker 之间所有消息都继承自 BaseCommand:例如 ActiveMQTextMessage,ConnectionInfo,KeepAliveInfo,BrokerInfo 等。

转载于:https://www.cnblogs.com/allenwas3/p/8715963.html

你可能感兴趣的文章
转换排列Qt中使用OpenCV显示图片时,Mat结构转换为QImage结构的问题
查看>>
继承接口面向对象的7个设计原则
查看>>
久病成医(1)
查看>>
小诗句集萃十
查看>>
CentOS下设置vimrc,添加文件注释信息以及设置tab 键为4 格
查看>>
【Demo 0052】发送消息的方法
查看>>
OSI七层模型和TCP/IP五层模型详解
查看>>
做游戏长知识------基于行为树与状态机的游戏AI(一)
查看>>
PostgreSQL 配置安装
查看>>
spark 源码分析之六--Spark RPC剖析之Dispatcher和Inbox、Outbox剖析
查看>>
数据类型转换
查看>>
织梦dedecms列表序号从0到1开始的办法 autoindex,itemindex标签
查看>>
股票基本名词
查看>>
爬虫实践--排行榜小说批量下载
查看>>
小程序背景图,真机测试图片丢失
查看>>
Spring mvc
查看>>
utf-8与unicode
查看>>
【转】UML类图关系全面剖析
查看>>
QT 窗口置顶功能
查看>>
jenkins报错jdk1.8/jre/lib/amd64/libawt_xawt.so
查看>>