向jms主题的新使用者发送上次发送的消息

向jms主题的新使用者发送上次发送的消息,jms,activemq,Jms,Activemq,是否可以将主题配置为仅存储最后一条消息的副本,并将其发送到新连接,而不知道客户端标识符或其他信息 更新: 从Shashi提供的信息中,我找到了这两个页面,在这两个页面中,他们描述了一个类似于我的用例(应用于股票价格),使用和。我怎么没有得到想要的行为。我现在做的是: 在activemq中包含topic=“>” 添加到用于连接brocker的URL(使用activemq cpp)consumer.retroactive=true 设置消费者具有耐久性。(但我强烈认为这不是我想要的,因为我只需要

是否可以将主题配置为仅存储最后一条消息的副本,并将其发送到新连接,而不知道客户端标识符或其他信息

更新: 从Shashi提供的信息中,我找到了这两个页面,在这两个页面中,他们描述了一个类似于我的用例(应用于股票价格),使用和。我怎么没有得到想要的行为。我现在做的是:

在activemq中包含
topic=“>”


添加到用于连接brocker的URL(使用activemq cpp)
consumer.retroactive=true

设置消费者具有耐久性。(但我强烈认为这不是我想要的,因为我只需要最后一个,但没有它,我在第二次启动消费者时没有收到任何消息)

  • 启动经纪人

  • 启动消费者

  • 使用activemq web管理控制台向主题发送消息。(如预期,我在消费者中收到)

  • 阻止消费者

  • 向主题发送另一条消息

  • 启动消费者。我收到了消息,这也是意料之中的

  • 但是,如果消费者收到一条消息,然后它脱机(停止进程),然后我重新启动它,它就不会返回最后一条消息

    目标是无论消费者何时开始收到最后一条消息,不管是什么(显然,除非没有消息发送到主题)

    你知道我遗漏了什么吗

    背景:

    我有一个设备,当某个主题的数据发生变化时,它会将他的数据发布到该主题。可连接到此主题的消费者数量可变,从0到少于10。该主题中只有一个发布者,并且始终将其所有数据发布为单个消息(少量数据,仅传感器读数的几个字段)。当某些内容发生更改时,此信息的发布率是可变的,而不一定是基于时间的,此时会向代理发送一条新的更新消息。 问题是,当新消费者连接到主题时,在设备向主题发送新消息之前,它没有设备读数的数据。这可以通过创建一个额外的队列来解决,这样新的连接可以订阅主题,然后通过队列请求设备进行当前读取(设备将使用队列消息,该消息将是数据请求,然后在同一队列中响应)。 但是,由于发送到主题的消息始终是信息完整的,我想知道是否可以将主题配置为仅存储最后一条消息的副本,并在不知道客户端标识符或其他信息的情况下将其发送到新的连接

    当前使用的代理是ActiveMQ。

    消息传递提供程序(例如WebSphere MQ)有一个名为
    保留发布的功能。使用此功能,主题上最后发布的消息将由消息传递提供商保留,并传递给在给定主题上发布消息后进入的新消费者

    保留发布
    可能由其本机接口中的活动MQ支持。本节讨论的是仅适用于OpenWire的
    consumer.retroactive

    发布者将在发布前通过设置消息的属性来通知消息传递提供程序保留发布。下面是如何使用WebSphereMQ完成的

    // set as a retained publication
    msg.setIntProperty(JmsConstants.JMS_IBM_RETAIN, JmsConstants.RETAIN_PUBLICATION)
    
    您想要的是拥有并设置主题上的
    lastImageSubscriptionRecoveryPolicy
    。Shashi正确地指出,以下用于将消费者设置为追溯的语法仅适用于Openwire

    topic = new ActiveMQTopic("TEST.Topic?consumer.retroactive=true");
    
    在您的情况下,您可以使用
    alwaysRetroactive=“true”
    在代理配置中将所有使用者配置为可追溯。我测试过,这甚至适用于AMQP协议(库qpid jms客户端),我怀疑它适用于所有协议

    <destinationPolicy>
      <policyMap>
        <policyEntries>
          <policyEntry topic="FOO.>" alwaysRetroactive="true">
            <subscriptionRecoveryPolicy>
              <lastImageSubscriptionRecoveryPolicy />
            </subscriptionRecoveryPolicy>
          </policyEntry>
    
    
    
    配置示例取自

    <destinationPolicy>
      <policyMap>
        <policyEntries>
          <policyEntry topic="FOO.>" alwaysRetroactive="true">
            <subscriptionRecoveryPolicy>
              <lastImageSubscriptionRecoveryPolicy />
            </subscriptionRecoveryPolicy>
          </policyEntry>