我的用例如下:我有几个用户,它们在国家/地区上订阅,换句话说,一个用户可以与某些国家/地区相关。
因此,生产者向美国国家发送消息,这意味着美国的订阅用户应收到此消息。就像扇出类型一样。
我正在考虑Rabbit MQ代理中传输消息的体系结构。
因此,我认为创建相等数量的国家/地区的交易所是一种丑陋的方式。
相反,我想放置一个交换,将名称国家/地区与某些队列绑定在一起,将一个国家/地区的一个队列绑定在一起。
然后在客户端,我确定用户订阅的队列(国家/地区)。
继续:
如果有分配给国家的城市,并且用户也订阅了国家的城市怎么办?
我应该创建另一个交换机cities
并侦听来自队列的消息吗?我可以直接从国家(地区)交换发送消息到城市交换吗?
方案是一个国家和一些相关城市:
Producer -> CountryExhange(USA) ->
CityExchange(Washington) -> Queue (Washington) ->
Consumes (USA, Washington)
答案 0 :(得分:1)
通常,消息路由取决于正在处理的消息的类型。因此,如果每个国家/地区都有自己的消息类型,则一定要在每个国家/地区设置一个队列。否则,让消息使用者处理特定国家/地区的逻辑。
编辑:
问题询问是否应创建其他交换。应当指出,交换的工作是将发布的每个消息路由到一个或多个队列。标准交换类型为直接,主题和扇出。默认情况下,这些交换存在于新配置的RabbitMQ服务器中。因此,除非需要其他交换类型,否则很少有添加其他交换有意义的情况。