【问题标题】:In Apache Artemis ActiveMQ, Would it be possible for to configure a diverts destination to be a source to another address?在 Apache Artemis ActiveMQ 中,是否可以将转移目标配置为另一个地址的源?
【发布时间】:2020-07-31 02:25:59
【问题描述】:

是否有可能将被转移的邮件的地址作为另一个地址的来源?如果这是可能的,新的目标地址是否可以具有与源不同的路由类型,换句话说,我的新源地址是多播,新目标是任播,如果我理解正确,则在地址之间转移从我在这里读到的内容,不同的路由类型是不可能的。

转移可以将特定的路由类型应用于消息,剥离现有的路由类型,或者简单地传递现有的路由类型。这在消息可能已设置其路由类型但您希望将其转移到使用不同路由类型的地址的情况下很有用。请务必记住,具有任播路由类型的消息实际上不会使用多播路由到队列,反之亦然

我尝试配置的设置如下所示

<addresses>
      <address name="source.A">
        <multicast>
          <queue name="source.A"/>
        </multicast>
      </address>
      <address name="source.B">
        <multicast>
          <queue name="source.B"/>
        </multicast>
      </address>
      <address name="destination.AB">
        <multicast>
          <queue name="destination.AB"/>
        </multicast>
      </address>
      <address name="destination.C">
        <anycast>
          <queue name="destination.C"/>
        </anycast>
      </address>
</addresses>

<diverts>
      <divert name="divert-A">
          <routing-name>divert-A</routing-name>
          <address>source.A</address>
          <forwarding-address>destination.AB</forwarding-address>
          <exclusive>true</exclusive>
        </divert>
        <divert name="divert-B">
          <routing-name>divert-B</routing-name>
          <address>source-B</address>
          <forwarding-address>destination.AB</forwarding-address>
          <exclusive>true</exclusive>
        </divert>

        <divert name="divert-AB">
          <routing-name>divert-AB</routing-name>
          <address>destination.AB</address>
          <forwarding-address>destination.C</forwarding-address>
          <exclusive>false</exclusive>
        </divert>

</diverts>

【问题讨论】:

  • 所以你真正想做的是将MULTICAST 路由类型的消息发送到source.A,然后将其转移到仅支持ANYCAST 的destination.AB 和@ 相同987654326@?
  • source.A 和 source.B 都收到 MULTICAST 路由类型的消息。即使destination.AB 只支持MULTICAST 路由类型。现在我想介绍destination.C,它只支持ANYCAST 路由类型,并从destination.AB 获取消息。这有意义吗?

标签: activemq-artemis


【解决方案1】:

将一个forwarding-address 用于另一个address(即“来源”)的forwarding-address(即“来源”)一起链接应该没有问题。

关于路由类型问题,我认为您误解了转移文档。声明“重要的是要记住,具有任播路由类型的消息实际上不会使用多播路由到队列,反之亦然”,它只是描述了转移暴露routing-type 配置的原因元素。不同路由类型的地址之间的转移当然是可能的。正如您引用的文档所解释的那样,使用 routing-type 配置元素转移可以执行以下操作之一:

  • 对消息应用特定的路由类型
  • 剥离现有的路由类型
  • 通过现有的路由类型

routing-type 的有效值为 ANYCAST、MULTICAST、STRIP 和 PASS。默认值为STRIP。正如文档所述,routing-type“在消息可能已设置其路由类型但您希望将其转移到使用不同路由类型的地址的情况下很有用。”

由于默认转移routing-type 是STRIP,任何流经转移的消息都将删除其路由类型,这意味着它将被路由到所有绑定到配置的@987654334 的队列@他们是anycast还是multicast队列。

【讨论】:

  • 感谢您的回复。它引用文本中的最后一句话实际上让我感到困惑,重要的是要记住,具有任播路由类型的消息实际上不会使用多播路由到队列,反之亦然。那么,我的配置是否符合我的意图?
  • 您引用的陈述是正确的,这也是为什么routing-type 可以首先在divert 上配置的原因。它描述了为什么您可能需要配置routing-type。据我所知,您的配置看起来不错。你测试过吗?
  • 顺便说一句,我更新了我的答案以澄清。希望有帮助!
  • 感谢更新,现在更清晰了。关于测试建议的路由设置,是的,我做了,但我没有通过我在 tad 端配置的divert.AB 在Destination.C 上接收消息。我没有在我的任何转移上指定路由类型,这意味着 artemis 应该将其默认为 STRIP?任何想法为什么这可能不起作用?
  • 我刚刚在 Artemis 测试套件中设置了一个快速测试,以反映您正在尝试做的事情并且一切正常。此外,代理附带的“转移”示例在支持不同路由类型的地址之间转发消息,它也可以正常工作。您需要制作一个可重现的测试用例,以便我进一步调查。
猜你喜欢
  • 2020-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-24
  • 2023-01-13
  • 1970-01-01
  • 1970-01-01
  • 2020-07-10
相关资源
最近更新 更多