1

我在 HornetQ 中设置主题桥时遇到了麻烦(与前面的问题有关)。这个想法是这样的:

  • 通知被发布到 HornetQ 服务器 A 上的主题
  • 此通知通过核心网桥发送到 HornetQ 服务器 B 上的主题
  • 客户端应用程序从服务器 B 获取通知。

我现在遇到的问题是,如果服务器 B 关闭,通知就会被丢弃。我会使用队列,但我们需要其他订阅者。我希望网桥是持久的,并且消息会发送到服务器 B 上的主题。我设置它的方式是在 hornetq-configuration.xml 中:

<queues>
    <queue name="jms.topic.topic.dat.cds.internal">
        <address>jms.topic.topic.dat.cds.internal</address>
    </queue>
</queues>

<bridges>
    <bridge name="cds-bridge">
        <queue-name>jms.topic.topic.dat.cds.internal</queue-name>
        <forwarding-address>jms.topic.topic.dat.cds</forwarding-address>
        <reconnect-attempts>-1</reconnect-attempts>
        <use-duplicate-detection>true</use-duplicate-detection>
        <static-connectors>
            <connector-ref>remote-connector</connector-ref>
        </static-connectors>
    </bridge>
</bridges>

这仅在两台服务器都启动时才有效。

有没有办法让网桥成为持久的订阅者?有什么我想念的吗?

[编辑 - 解决方案] - 这有效。诀窍是主题名称必须相同。

<queues>
    <queue name="jms.topic.topic.dat.cds">
    <address>jms.topic.topic.dat.cds</address>
</queue>

<bridges>
<bridge name="cds-bridge">
    <queue-name>jms.topic.topic.dat.cds</queue-name>
    <forwarding-address>jms.topic.topic.dat.cds</forwarding-address>
    <reconnect-attempts>-1</reconnect-attempts>
    <use-duplicate-detection>true</use-duplicate-detection>
    <static-connectors>
        <connector-ref>remote-connector</connector-ref>
    </static-connectors>
</bridge>
</bridges>
4

1 回答 1

0

假设您有主题 jms.topic.SomeTopic

您可以这样创建核心队列:

<queues>
    <queue name="SomeTopicBridge">
        <address>jms.topic.SomeTopic</address>
    </queue>
</queues>

请注意,桥接队列上的地址与您的主题名称相同。

HornetQ 上的持久订阅只是主题地址的核心队列。

这样,消息将等待激活,直到您重新启动目标服务器。

如果这不能回答您的问题,请向我提供更多详细信息,我将发布编辑此答案以更好地解决您的问题。

在您的情况下,您的地址应该是这样的:

<queues>
    <queue name="cds-bridge-queue">
        <address>jms.topic.topic.dat.cds</address>
    </queue>
</queues>

有了这个,你将在主题地址上创建一个核心队列,这个核心队列将接收发送到主题的所有消息,即使网桥离线。

于 2013-05-01T20:33:50.597 回答