ActiveMQ访问以前发布的订阅数据

时间:2017-05-09 10:28:22

标签: c# activemq

我们在本地使用ActiveMQ在同时转换的5个进程之间传输数据。

我有一些数据需要发送到进程,在运行时(完全正常),但也是start的默认值。它是在流程开始时发布的,它只是没有读取,因为它在发送数据时没有订阅主题。

我有多种解决方案:我可以推迟第一次发布,以便流程有时间启动(这看起来并不吸引人);或者有没有办法将所有存储的以前未处理的消息发送给刚刚订阅的某个进程?

我在C#编码。

3 个答案:

答案 0 :(得分:0)

我对ActiveMQ没有任何经验,但是其他消息系统通常都有一个选项,将订阅标记为持久性,这意味着;第一次订阅后;消息队列本身检查是否将某个消息传递到该系统并重试超时。在这种情况下,您需要至少启动一次接收器。

如果这不是一个选项,并且您希望之后插入接收器,您可能需要考虑设置消息,以便检索完整状态,即如果您发送total-messages而不是{{ 1}}。

在谷歌之后,我发现了这个定义differential- messages,我希望这会有所帮助:

请参阅:

http://activemq.apache.org/how-do-durable-queues-and-topics-work.html

http://activemq.apache.org/manage-durable-subscribers.html

答案 1 :(得分:0)

因为您使用的是C#客户端,所以如果支持,请不要知道

topic = new ActiveMQTopic("TEST.Topic?consumer.retroactive=true");

http://activemq.apache.org/retroactive-consumer.html

因此,另一种解决方案是在代理端配置此行为,方法是将其添加到activemq.xml并重新启动:

  

订阅恢复政策允许您及时返回   你订阅了一个主题。

<destinationPolicy>
  <policyMap>
    <policyEntries>
      <policyEntry topic=">" >
        <subscriptionRecoveryPolicy>
          <timedSubscriptionRecoveryPolicy recoverDuration="10000" />
          <fixedCountSubscriptionRecoveryPolicy maximumSize="10000" />
        </subscriptionRecoveryPolicy>
      </policyEntry>
    </policyEntries>
  </policyMap>
</destinationPolicy>

http://activemq.apache.org/subscription-recovery-policy.html

答案 2 :(得分:0)

我解决了这个问题,当每个进程重新启动回主进程时发送一条消息,然后只发送我需要发送的信息。