Rabbitmq 使用路由密钥通信服务
以以下要求为例: 服务A做了一些工作。这项工作是定期完成的,没有人要求服务A去做。这是自动完成的 服务B需要查询由服务A生成的数据服务A驻留在与服务B不同的服务器上 也就是说,如果服务A没有提供请求数据的方法,那么服务B将无法获取数据 我想通过使用RabbitMQ的SOA方式要求服务A数据:当服务B需要一些数据时,它会向给定的交换发送一条消息,并将其写入某个队列。然后,服务A处理该消息并将答案发布到其他某个exchange。最后,服务B侦听应答消息,循环结束 我的问题 我需要某种方法来发布和使用由向服务A请求数据的操作标识的消息,并且我还需要每个启动的操作都可以由唯一标识符标识 我的问题是关于如何发布消息并能够接收操作特定调用的答案 我只想验证RabbitMQ路由密钥是否满足此要求。例如,服务A发送带有路由密钥的消息Rabbitmq 使用路由密钥通信服务,rabbitmq,message-queue,soa,esb,microservices,Rabbitmq,Message Queue,Soa,Esb,Microservices,以以下要求为例: 服务A做了一些工作。这项工作是定期完成的,没有人要求服务A去做。这是自动完成的 服务B需要查询由服务A生成的数据服务A驻留在与服务B不同的服务器上 也就是说,如果服务A没有提供请求数据的方法,那么服务B将无法获取数据 我想通过使用RabbitMQ的SOA方式要求服务A数据:当服务B需要一些数据时,它会向给定的交换发送一条消息,并将其写入某个队列。然后,服务A处理该消息并将答案发布到其他某个exchange。最后,服务B侦听应答消息,循环结束 我的问题 我需要某种方法来发布和使用
072e6ee1-6046-4c3b-bade-9077c863637b
。服务B中有一个使用者,它会使用忽略路由密钥的任何消息,但一旦产生结果,它就会使用相同的路由密钥将消息发布到exchange。因此,服务A接收消息,因为它绑定到整个路由密钥
这可能是正确使用路由密钥吗?如果我理解正确,这似乎不是正确使用路由密钥的方法。路由键通常用于定义操作,例如“做这个”或“做那个”——我不希望它们包含键,除非这些键是定义系统如何操作的有限集。您提到的ID(它们似乎是相关ID,以便您可以异步地将接收到的响应与出站请求相匹配)将包含在消息体中。因此,您有以下设置:
最后,RabbitMQ已经提供了一个解决方案来解决我的场景: 在一天结束时,消息可以有相关id和回复字段:
- 相关id。用于跨多个交换机/队列唯一标识操作的任意值
- 回复。一个任意的
,用于定义要将给定操作的结果放在哪个exchange或队列上。目标交换/队列将是操作将接收的回调信息字符串
如果我找到使用RabbitMQ的其他方法,我将更新我的答案 嘿!谢谢你的回答。我关心的是,在第五步中,服务B如何接收消息?它是否需要使用所有消息并按
Id
对其进行过滤,并确认具有所需Id
的消息?这就是考虑路由密钥的原因,因为我可以接收消息,而不会浪费大量资源来接收我不想接收的消息。我仍在寻找最佳解决方案,我发现你也可以使用消息头。也许这就是解决办法?消息头而不是路由键见我自己的答案,我相信这应该是一个很好的解决方案,不是吗?嗯,在测试了我找到的解决方案后,似乎消费者无法通过消息头进行过滤。它的目的就是在配置头文件交换绑定时这样做……我发现RMQ帮助页面很有用。您可能需要查看主题交换: