jms - Artemis MQ 发送方如何获得接收确认
问题描述
您好,发件人 A 是否有可能将生存时间为 30 秒的消息放入队列中。并得到一个:
- 如果接收者 B 得到/处理了消息,则 ACK 通知
- 如果在接收器 B 收到消息之前达到 ttl,则 NACK
如果没有在业务逻辑中实现,是否有任何可能性?
使用的编程语言:java 首选协议:jms
解决方案
这个问题有点模棱两可。
如果“发件人”是指实际的javax.jms.MessageProducer
, javax.jms.QueueSender
,javax.jms.TopicPublisher
则答案是否定的。在 JMS(以及大多数其他异步消息传递系统中)中,消费者和生产者在逻辑上是分离的。换句话说,生产者不知道(通常也不关心)消费者在做什么。因此,如果消费者获得/处理了它发送的消息,JMS 生产者无法自动获得 ACK 通知,或者如果消息的 TTL 在被消费之前已过,则无法获得 NACK。
但是,如果“发件人”只是指发送应用程序,那么答案就更有希望了。配置好NotificationActiveMQServerPlugin后,您可以通过管理通知地址(类似于 Tibco 的$sys.monitor
主题)获取过期通知。NotificationActiveMQServerPlugin 不支持确认通知,但您可以轻松扩展插件以支持它们,因为插件体系结构中已经有挂钩来捕获消息确认。
推荐阅读
- logstash - 使用 Logstash Aggregate Filter 插件处理可能排序或未排序的数据
- r - 将变量传递给 read.fwf 中的宽度参数
- autohotkey - 需要双显示器帮助 [AutoHotkey]
- mysql - mysql查询连接三个表的问题
- javascript - MongoDB聚合匹配嵌套数组
- excel - 如何以编程方式执行 microsoft excel office 脚本?
- google-app-engine - 将 http 重定向到 https 应用引擎
- java - 为什么 javax.swing.UIManager.getDefaults() 报告 keySet.size 为零?
- r - 如何拆分由“;”分隔的列的元素 并保持其频率值
- angular - 无法解析“child_process”