我想使用来自特定队列的多条消息或使用给定密钥的特定交换。
所以场景如下:
Publisher通过队列1发布消息1 发布者通过队列1发布消息2 发布者通过队列1发布消息3 发布者通过队列2发布消息4 发布者通过队列2发布消息5 .. 消费者使用队列1中的消息 同时获取[消息1,消息2,消息3]并在一次回叫中处理它们
listen_to(queue_name , num_of_msg_to_fetch or all, function(messages){
//do some stuff with the returned list
});
消息不是同时发生的,它就像是事件,我想将它们收集在队列中,打包并发送给第三方。
我也读过这篇文章:
http://rabbitmq.1065348.n5.nabble.com/Consuming-multiple-messages-at-a-time-td27195.html
由于
答案 0 :(得分:0)
不要直接从队列中消费,因为队列遵循循环算法(AMQP授权) 使用铲子将队列内容传输到扇出交换机并直接从此交换消息。您将获得所有连接的消费者的所有消息。 :)
答案 1 :(得分:0)
如果您想使用来自特定队列的多条消息,您可以尝试如下。
channel.queueDeclare(QUEUE_NAME, false, false,false, null);
Consumer consumer = new DefaultConsumer(channel){
@Override
public void handleDelivery(String consumerTag,
Envelope envelope,
AMQP.BasicProperties properties,
byte[] body)
throws IOException {
String message = new String(body, "UTF-8");
logger.info("Recieved Message --> " + message);
}
};
答案 2 :(得分:0)
您可能需要在概念上将域消息与 RMQ 消息分开。作为生产者,您可以将多个域消息捆绑到单个 RMQ 消息中,然后将其 .produce()
到 RMQ。请记住,由于窗口的存在,这种设计引入了超时和延迟(您可能会从 Kafka 那里得到一些印象,它以延迟为代价进行捆绑以优化 I/O)。
作为消费者,您将拥有一个具有典型 .handleDelivery
实现的消费者,该实现将转换接收到的正文以进行处理:byte[] -> Set[DomainMessage] -> your listener
。