2010-08-06 154 views
0

我已创建一个RabbitMQ生产者和一个RabbitMQ消费者....RabbitMQ消息交换

假设我的生产者生产10条消息。我如何从这10条消息中获得特定的消息。

我想知道如何唯一标识一条消息并阅读该消息或使用该消息。

+0

这是当阻塞的例子一个真正的问题,他想知道如何过滤消息。 – 2010-08-06 13:49:37

+0

您是使用JMS还是使用AMQP? – 2010-08-06 13:49:58

+0

我使用AMQP .. – 2010-08-08 06:38:47

回答

0

有几种方法可以做到这一点,但我最常用的方法是使用对消息类型唯一的路由键。然后,消费者使用特定的路由密钥绑定到该交换机上,这会导致消息只发送给这些消费者。

如果你可以避免它,你永远不应该只将信息转储到一个队列中,让消费者将它们排序。路由密钥和交换机是专门用于路由消息的强大工具。你应该利用这一点。

+0

Brisbin感谢您回答这个问题。那么我已经知道你在说什么了。但我有这个奇怪的要求。这就是我想要做的事情:当制作人发布消息时(假设他已经发布了5条消息),我们应该通知发布者他的每条消息是如何被唯一标识的。当出版商要求他通过我们提供给他的唯一标识符发布的特定消息时,应该向他展示该消息,以便如果他希望他可以编辑它并发布新消息。 – 2010-08-09 05:28:23

+0

首先我们绑定交换,队列和路由键 例如:ch.QueueBind(“queue”,“exch”,“key2”,false,null); 当你发布一条消息时,你提到了交换,路由密钥,basicproperties,消息体,例如:ch.BasicPublish(“exch”,“key2”,null,messagebody1); 虽然您使用该消息,但只提及队列名称。 eg:BasicGetResult result = ch.BasicGet(“queue”,noAck); 现在上面的语句将消耗队列中的所有消息..我的问题是如果我想从队列中使用基于路由密钥的特定消息。 – 2010-08-09 05:34:19