gpt4 book ai didi

jms - 将最后发送的消息发送给 jms 主题的新消费者

转载 作者:行者123 更新时间:2023-12-04 21:16:30 31 4
gpt4 key购买 nike

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

更新:
从 Shashi 提供的信息中,我发现这两页使用 retroactive consumer 描述了一个类似于我的用例(适用于股票价格)和 subscription recovery policy .我怎么没有得到想要的行为。我目前做的是:

在 activemq 中包含 topic=">" 的 policyEntry 中的以下行

<subscriptionRecoveryPolicy>
<fixedCountSubscriptionRecoveryPolicy maximumSize="1"/>
</subscriptionRecoveryPolicy>

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

设置消费者具有耐用性。 (但我强烈认为这是不想要的,因为我只需要最后一个,但没有它我在第二次启动消费者时没有收到任何消息)
  • 启动代理。
  • 启动消费者。
  • 使用 activemq Web 管理控制台向主题发送消息。 (正如预期的那样,我在消费者中收到它)
  • 停止消费者。
  • 向该主题发送另一条消息。
  • 开始消费。我收到了消息,也如预期的那样。

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

    目标是无论何时消费者开始获取最后一条消息,无论如何(显然,除非没有消息发送到主题)。

    关于我所缺少的任何想法?

    背景:

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

    当前使用的代理是 ActiveMQ。

    最佳答案

    你想要的是拥有retroactive consumers并设置 lastImageSubscriptionRecoveryPolicy subscription recovery policy关于这个话题。 Shashi 正确地说,以下将消费者设置为追溯的语法仅适用于 Openwire

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

    在您的情况下,您可以做的是将所有消费者配置为在代理配置中具有追溯性 alwaysRetroactive="true" .我测试了这甚至适用于 AMQP 协议(protocol)(​​库 qpid-jms-client),我怀疑它适用于所有协议(protocol)。
    <destinationPolicy>
    <policyMap>
    <policyEntries>
    <policyEntry topic="FOO.>" alwaysRetroactive="true">
    <subscriptionRecoveryPolicy>
    <lastImageSubscriptionRecoveryPolicy />
    </subscriptionRecoveryPolicy>
    </policyEntry>

    配置示例取自 https://github.com/apache/activemq/blob/master/activemq-unit-tests/src/test/resources/org/apache/activemq/test/retroactive/activemq-message-query.xml

    关于jms - 将最后发送的消息发送给 jms 主题的新消费者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22036323/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com