ActiveMQ broker和客户端之间的确认
生产者发送消息: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 等。
ActiveMQ broker和客户端之间的确认的更多相关文章
- 【WP开发】不同客户端之间传输加密数据
在上一篇文章中,曾说好本次将提供一个客户端之间传输加密数据的例子.前些天就打算写了,只是因一些人类科技无法预知的事情发生,故拖到今天. 本示例没什么技术含量,也没什么亮点,Bug林立,只不过提供给有需 ...
- RocketMQ 创建和删除 topic,以及 broker 和 nameserver 之间的心跳
命令行主类:org.apache.rocketmq.tools.command.MQAdminStartup 客户端创建 topic 程序参数:updateTopic -n localhost:987 ...
- Socket编程——怎么实现一个服务器多个客户端之间的连接
package coreBookSocket; import java.io.IOException; import java.net.ServerSocket; import java.net. ...
- 不制作证书是否能加密SQLSERVER与客户端之间传输的数据?
不制作证书是否能加密SQLSERVER与客户端之间传输的数据? 在做实验之前请先下载network monitor抓包工具 微软官网下载:http://www.microsoft.com/en-us/ ...
- 实现 Web 后端和客户端之间的分布式和认证通讯
stack.io 是一个用于实现 Web 后端和客户端之间的分布式和认证通讯. 服务器端进程之间的通讯是非常高效的,因为没有中间的代理.而来自客户端的请求通过 socket.io 进入 Node.js ...
- 使用rsync在windows(服务端)与linux(客户端)之间同步
说明: 1.cwRsyncServer服务端 系统:Windows7 IP地址:192.168.0.110 2.Rsync客户端 系统:CentOS 6.7 IP地址:192.168.0.141 实现 ...
- ActiveMQ broker解析
在 ActiveMQ 中,broker 集中管理持久的.临时的 queue 和 topic. public class BrokerFilter implements Broker { // 省略其他 ...
- C#基于RabbitMQ实现客户端之间消息通讯实战演练
一.背景介绍和描述 MQ消息队列已经逐渐成为企业IT系统内部通信的核心手段.它具有低耦合.可靠投递.广播.流量控制.最终一致性等一系列功能,成为异步RPC的主要手段之一.何时需要消息队列?当你需要使用 ...
- 使用rsync在linux(服务端)与windows(客户端)之间同步
说明: 1.RsyncServer服务端 系统:CentOS 6.8 IP地址:192.168.247.141 2.Rsync客户端 系统:Windows10 实现目的: Rsync客户端同步服务端/ ...
随机推荐
- ArcGis连接oracle、oracle配置
服务器:Oracle 11g(我是默认路径安装,自定义路径没成功,不知道为什么) 客户端:arcgis desktop 10.2.oracle 11g 32位客户端 客户端:arcgis server ...
- 安装tensorflow-gpu
pip install --upgrade tensorflow-gpu import tensorflow as tf sess = tf.Session() 如果提示如下 -- ::] Your ...
- Type mismatch: cannot convert from javax.servlet.http.Cookie[] to org.apache.tomcat.util.http.parser.Cookie[] 的一种可能
今天用到Cookie时,写了一个Cookie数组,发现报错“Type mismatch: cannot convert from javax.servlet.http.Cookie[] to org. ...
- 记录Python类与继承的一个错误
今天在学python的类与继承的时候遇到一个错误,原来是自己在ctrl+c ctrl+v的时候漏了一个括号 class Car(): def __init__(self,make,year,mode ...
- leecode第十五题(三数之和)
class Solution { public: void quick_order(vector<int>& num, int star, int en)//快排 { int st ...
- 安装Linux系统的磁盘分区
●CentOS磁盘分区 分区顺序: "/"分区(逻辑) -> "/boot"分区(主分区) -> "swap"分区(逻辑) -& ...
- 最大频率栈 Maximum Frequency Stack
2018-10-06 22:01:11 问题描述: 问题求解: 为每个频率创建一个栈即可. class FreqStack { Map<Integer, Integer> map; Lis ...
- maven的安装以及问题
https://blog.csdn.net/machao0903/article/details/73368909https://www.cnblogs.com/jiejiecool/p/421885 ...
- Bash Shell 注释多行的几种方法(转)
很实用的小技巧. 我们shell脚本写好了,但是想一行一行测试,怎么办. 笨方法:每行前面加一个 #,有时候我们原脚本里面本来就有注释,所以想再恢复的时候就麻烦了. Bash Shell 注释多行的几 ...
- 2017-2018-2 20165327 实验四《Android程序设计》实验报告
2017-2018-2 20165327 实验四<Android程序设计>实验报告 任务一 Android Stuidio的安装测试: 任务要求 参考Android开发简易教程,安装 An ...