【问题标题】:RabbitMq like topic exchanges with MasstransitRabbitMq like 与 Masstransit 的话题交流
【发布时间】:2021-11-28 15:24:52
【问题描述】:

我阅读了 rabbitmq 教程,非常喜欢 topic exchanges 的想法。在我的架构中,我会有像continent.city.street 这样的主题。正如你所想象的那样,只有有限数量的大陆,但几乎无限的城市和街道,它们都可以有重复的名称(如NorthAmerica.GeorgsTown.MainstreetEurope.GeorgsTown.MainstreetAsia.NewTown.MainstreetAustralia.NewTown.LostRoad

现在我了解到Masstransit,一个我想学习/使用的库,does not support this kind of topics。 (有某种支持,但我也可以使用通用的 RabbitMq 客户端)

那么,实现类似事情的最佳方式是什么,例如rabbitmqs主题交换,但使用Masstransit(通过(任何)MQ/rider系统),性能

一些可能对性能产生影响的事实:

  • 几乎没有消费者对整个大陆感兴趣 - 但有些人对此感兴趣。 Asia.*.*
  • 各大洲的主要目标是让城市变得独一无二(在这个虚构的案例中)。
  • 大约 30% 的消费者愿意订阅城市 大陆或街道。 *.GeorgsTown.*
  • 大约 30% 的消费者愿意 知道在特定街道上会发生什么,无论是城市还是大陆。 *.*.Mainstreet
  • 大约 30% 正在关注特定组合,例如 Antarctica.GeorgsTown.Mainstreet

【问题讨论】:

    标签: c# message-queue masstransit rabbitmq-exchange


    【解决方案1】:

    MassTransit 很好地支持主题交换,它们类似于 Direct Exchange 示例中定义的那些,但使用主题模式路由键代替。

    【讨论】:

    • 感谢您的回复。如果我测试正确 - 过滤是在客户端完成的?但是我只找到了x.UseRoutingKeyFormatter()
    • 在使用主题交换时过滤由 RabbitMQ 完成。路由密钥格式化程序只是在发送/发布消息时自动设置路由密钥。您也可以在发送/发布消息时明确设置。
    • 当我使用具有给定主题语法的 RoutingKeyFormater 时,创建的交换的类型为 fanout。如果我使用cfg.Publish<T>(x => { x.ExchangeType = ExchangeType.Topic; });,它只会改变主题。这是正确的解决方案(结合两个命令)吗?
    • 是的,您需要为每种消息类型配置交换。
    猜你喜欢
    • 1970-01-01
    • 2023-02-23
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多