gpt4 book ai didi

java - 重播通过 ActiveMQ 发送的消息

转载 作者:搜寻专家 更新时间:2023-10-31 20:13:41 24 4
gpt4 key购买 nike

是否有一种简单的方法可以为通过队列发送的每条消息创建一个副本,以便在需要时用户可以浏览之前传输的消息列表并通过单击按钮多次重播它们?

我有程序 X 将消息发送到队列,然后程序 Y 将其读入。我希望能够重播之前发送的消息,而不必返回程序 X 并重新生成它。

最佳答案

如果您没有太多消息或太多队列,可以通过简单的方法开始。

首先,您可以设置将消息复制到“复制队列”。使用此策略,每个队列必须执行一次。在 activemq.xml

中这样
    <destinationInterceptors>
<virtualDestinationInterceptor>
<virtualDestinations>
<compositeQueue name="INVOICE.OUT">
<forwardTo>
<queue physicalName="INVOICE.IN" />
<queue physicalName="INVOICE.COPY" />
</forwardTo>
</compositeQueue>
</virtualDestinations>
</virtualDestinationInterceptor>
</destinationInterceptors>

然后使用工具浏览COPY队列中的消息,如果需要,将它们重新发送到OUT队列。我喜欢 Hermes JMS这类事情的工具。

如果你想要更花哨的东西,你可以阅读 mirrored queues .

还有另一种相当简单的方法可以轻松复制所有消息。

使用与 activemq 捆绑在一起的 apache-camel。camel.xml 中的此配置将实现将所有消息自动复制到以 FOO 开头的队列。*这条路线需要对复制队列名称进行一些修复,但原则上它可以作为窃听的一次性配置。

<route>
<from uri="activemq:FOO.>"/>
<setHeader headerName="CamelJMSDestination">
<simple>COPY.${header.JMSDestination}</simple>
</setHeader>
<to uri="activemq:dummy"/>
</route>

这里一个非常重要的方面是,如果您存储所有消息,您的服务器将随着时间的推移而填满。我建议你阅读 ActiveMQ memory management或者,只保留给定时间范围内的消息副本。从发送系统实际上可以设置 message expiry 的意义上说,这可以是自动化的。以便消息在数天/数周/数月后自动删除。

关于java - 重播通过 ActiveMQ 发送的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13882523/

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