的RabbitMQ AMQP - 听ACK从消费信息

问题描述 投票:4回答:1

我在同一台机器上生产商和经纪商。生产者发送消息如下所示:

channel = connection.createChannel();

//Create a durable queue (if not already present)
channel.queueDeclare(merchantId, true, false, false, null);

//Publish message onto the queue
channel.basicPublish("", consumerId, true, false,
    MessageProperties.MINIMAL_PERSISTENT_BASIC, "myMessage");

消费者坐在另一台机器上,并监听消息。它使用的明确确认,如下所示:

while (true) {
    QueueingConsumer.Delivery delivery = consumer.nextDelivery();
    //Handle message here  
    channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
}   

从我的理解中,ACK是为券商出队的消息。

但我的制片人怎么可以来了解ACK,消费者发送?

rabbitmq amqp producer-consumer
1个回答
5
投票

生产者和消费者通常不进行交互。这是通过AMQP协议设计。例如,消费特定消息可以这样做在发布后很长一段时间,并且在离开生产启动并运行了很长一段时间没有任何意义。另一个例子是,当发布者发送一个消息给代理,并且由于路由逻辑,其消息被复制到多个队列,导致歧义(因为多个消费者可以确认相同的消息)。 AMQP协议是异步的(大部分),并让发布商了解其信息被消耗只是不适合的AMQP异步模式。

有来自例外,值得注意的是,RPC调用。然后生产者变成了生产者 - 消费者。它发出了一个消息,然后立即等待答复(有很好的RabbitMQ手册 - Direct reply-to有关RPC与RabbtiMQ)。

在一般情况下,可以确保邮件传递给经纪人与Confirms (aka Publisher Acknowledgements)一起与Dead Letter ExchangesAlternate Exchanges。那些包括大多数情况下它可以从它的正常流动会丢失的消息。

© www.soinside.com 2019 - 2024. All rights reserved.