RabbitMQ--有选择地从队列中检索消息

lar*_*ryq 14 rabbitmq

我是RabbitMQ的新手,并且想知道我正在考虑解决这个问题的好方法.我想创建一个订阅队列的服务,只提取符合特定条件的消息; 例如,如果消息中包含特定主题标题.

我还在学习RabbitMQ,并且正在寻找如何解决这个问题的技巧.我的问题包括:消费者如何仅从队列中提取特定消息?生产者如何在消息中设置主题标题(如果这甚至是正确的术语?)

rob*_*olf 25

RabbitMQ非常适合这种情况.你有很多选择可以做你想做的事.我建议阅读文档以便更好地理解.我建议您使用主题或直接交换.主题更灵活.它是这样的.

生产者代码连接到RabbitMQ Broker并使用特定名称创建和Exchange.

制片人发布交换.发布的每条消息都将使用路由密钥发布.

消费者连接到RabbitMQ经纪人.

消费者创建队列

消费者将Queue绑定到交换机,即生产者中定义的相同交换.绑定还包括针对该特定消费者的每个消息所需的路由密钥.

让我们说你发布了日志消息.路由键可能类似于"log.info","log.warn","log.error".生产者发布的每条消息都附有相关的路由密钥.然后,您将拥有一个发送和发送电子邮件以获取所有错误消息的消费者,以及另一个将所有错误消息写入文件的消费者.因此,电子邮件程序将使用路由键"log.error"定义从其队列到交换的绑定.这样,虽然交换机接收所有消息,但为电子邮件发送者定义的队列将只包含错误消息.filelogger将定义绑定到同一交换机的新单独队列,并设置不同的路由密钥.您可以为三个不同的路由键要求执行三个单独的绑定,或者只使用通配符"log.*"从log开始请求来自交换的所有消息.

这是一个简单的示例,展示了如何实现您想要做的事情.

看看这里的代码示例具体数目教程5号.

  • @ThemeZ消费者接收队列中的所有消息.我认为这是定义.这里的要点是它们在交换层被过滤.通过主题交换,队列将仅接收某些消息.这样,消费者将阅读他们想要的消息,因为队列只接收消费者想要的消息. (3认同)
  • 我认为这不能回答问题。问题是有一个名为“log”的队列,并且消费者只能使用队列中的“info”日志。 (2认同)