【问题标题】:Artemis MQ how can sender get reception acknowledgeArtemis MQ 发送方如何获得接收确认
【发布时间】:2019-08-13 21:57:49
【问题描述】:

您好,发件人 A 是否有可能将生存时间为 30 秒的消息放入队列中。 并得到一个:

  • 如果接收者 B 获得/处理了 msg,则发出 ACK 通知
  • 如果在接收器 B 收到消息之前到达 ttl,则 NACK

如果没有在业务逻辑中实现,是否有任何可能?

使用的编程语言:java 首选协议:jms

【问题讨论】:

    标签: jms activemq-artemis


    【解决方案1】:

    这个问题有点模棱两可。

    如果“发件人”是指实际的javax.jms.MessageProducer、javax.jms.QueueSender 或javax.jms.TopicPublisher,那么答案是否定的。在 JMS(以及大多数其他异步消息传递系统中)中,消费者和生产者在逻辑上是分离的。换句话说,生产者不知道(通常也不关心)消费者在做什么。因此,如果消费者获取/处理了它发送的消息,JMS 生产者无法自动获取 ACK 通知,或者如果消息的 TTL 在被消费之前已过,则 JMS 生产者无法自动获取 NACK。

    但是,如果“发送者”只是指发送者应用程序,那么答案就更有希望了。配置NotificationActiveMQServerPlugin 后,您可以通过management notification 地址(类似于Tibco 的$sys.monitor 主题)获取到期通知。 NotificationActiveMQServerPlugin 不支持确认通知,但您可以轻松扩展插件以支持它们,因为插件架构中已经有挂钩来捕获消息确认。

    【讨论】:

    • 是的,这是我知道的一般事实。但例如 tibco ems 也是一个 jms 代理,并支持一些“神奇”的主题来接收 N/ACK。
    • Tibco EMS 服务器提供以下主题: // 安装 ACK 监听器 "$sys.monitor.Q.a.MY.QUEUE.I.SEND.MSG.TO" // 安装 NACK 监听器 "$sys.monitor .Q.p.MY.QUEUE.I.SEND.MSG.TO"
    猜你喜欢
    • 2014-01-05
    • 2020-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    • 2012-10-29
    • 1970-01-01
    • 2014-10-23
    相关资源
    最近更新 更多