gpt4 book ai didi

rabbitmq - 如何使 Rebus 与 RabbitMQ 中的自定义主题交换配合得很好?

转载 作者:行者123 更新时间:2023-12-04 03:00:36 24 4
gpt4 key购买 nike

Rebus 具有灵活的系统,允许我在 web.config 中或通过实现自定义 IDetermineMessageOwnership 为不同的消息类型指定不同的端点。

据我所知,消息所有权仅由一个字符串表示。使用 MSMQ 传输,此字符串指向消息传递到的队列。在 RabbitMQ 中,该字符串用作消息的主题,然后传递给名为“Rebus”的通用交换。 Rebus 是一个好人,所以他还在 RabbitMQ 服务器中设置了一个队列,使用相同的名称,并在 Rebus 交换中从主题到队列进行绑定(bind)

我的问题是:是否有可能让 Rebus 创建队列和绑定(bind),但仍将消息传递到为每条消息设置相关主题的交换器?

手动声明队列和绑定(bind)将允许我设置一个很棒的主题交换,使用带有通配符的绑定(bind)等等。这是一个很好的主题交换示例,带有时髦的绑定(bind),只是为了让我的问题看起来更圆滑和性感:

Illustration of topic exchange in RabbitMQ

最佳答案

在我看来你想做这样的事情:

Configure.With(yourFavoriteContainer)
.Transport(t => t.UseRabbitMq(...)
.ManageSubscriptions()) //< BAM!!1
.(...)

这让 Rebus 可以利用 Rebus 的 RabbitMqMessageQueue工具 IMulticastTransport ,这又将所有事情的处理转交给 Rabbit。

重要的是,所有支持 Rabbit 的 Rebus 端点都同意让 Rabbit ManageSubscriptions - 否则,可能会发生奇怪的事情;)

意思是

  • 当你bus.Subscribe<SomeEvent> ,您将具有类型名称的主题绑定(bind)到订阅者的输入队列 - 例如"SomeEvent.SomeNamespace" -> myInputQueue
  • 发布者发布主题为类型名称的事件 - 例如"SomeEvent.SomeNamespace"
  • 订阅时忽略消息所有权
  • Rabbit 将在进行多播时承担繁重的工作(这是 Rabbit 用户最常做的事情)

如果您需要更大的灵 active ,您甚至可以负责为每种 .NET 类型决定要发布到的主题,如下所示:

Configure.With(yourFavoriteContainer)
.Transport(t => t.UseRabbitMq(...)
.ManageSubscriptions()
.AddEventNameResolver(type => DecideTopic(type))
.(...)

如果需要,您可以添加多个事件名称解析器 - 它们将按顺序运行,直到其中一个返回不是 null 的内容。 .

有道理吗?

关于rabbitmq - 如何使 Rebus 与 RabbitMQ 中的自定义主题交换配合得很好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14772877/

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