【问题标题】:HornetQ Topic to Topic bridge dropping messagesHornetQ 主题到主题桥丢弃消息
【发布时间】:2013-04-25 21:18:18
【问题描述】:

我在 HornetQ (related to earlier question) 中设置主题桥时遇到问题。思路是这样的:

  • 通知被发布到 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>

【问题讨论】:

    标签: jms hornetq


    【解决方案1】:

    假设你有主题 jms.topic.SomeTopic

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

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

    请注意,Bridge Queue 上的地址与您的主题名称相同。

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

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

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

    根据你的情况,你的地址应该是这样的:

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

    这样,您将在主题地址上创建一个核心队列,该核心队列将接收发送到该主题的所有消息,即使网桥处于离线状态。

    【讨论】:

    • 我想这就是我上面所说的。核心队列是“jms.topic.topic.dat.cds.internal”。它通过桥转发到“jms.topic.topic.dat.cds”。如果网桥关闭(即第二台服务器离线),主题消息将丢失。我希望网桥作为持久订阅者发挥作用,并始终保留主题消息,直到网桥另一侧的主题可用。
    • Source 的主题名称是什么?看来你地址错了
    • "jms.topic.topic.dat.cds.internal" 是桥源端的主题。 “jms.topic.topic.dat.cds”是消费者端的话题。
    • 注意:上面的xml是从源端的配置中截取的。目的端只是一个主题,没有特殊配置。
    • 那是你当时的错误..你的队列地址应该是jms.topic.topic.dat.cds
    猜你喜欢
    • 2013-04-01
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 2023-03-27
    • 2012-01-03
    • 2015-08-28
    相关资源
    最近更新 更多