rabbitmq amqp - 收听消费者的ack消息

ara*_*ant 4 producer-consumer amqp rabbitmq

我在同一台机器上有一个生产者和经纪人.生产者发送如下消息:

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");
Run Code Online (Sandbox Code Playgroud)

消费者坐在另一台机器上并收听消息.它使用如下明确的确认:

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

根据我的理解,ack意味着经纪人将消息出列.

但是,我的制作人如何才能了解消费者发送的确认?

pin*_*ain 5

生产者和消费者通常不互动.这是通过AMQP协议设计的.例如,消费特定消息可能在发布后很长时间内完成,并且让生产者长时间保持运行是没有意义的.另一个例子是当发布者向代理发送一条消息时,由于路由逻辑,消息被复制到多个队列,导致歧义(因为多个消费者可以确认相同的消息).AMQP协议是异步的(大多数情况下),让发布者知道它正在被消费的消息不适合AMQP异步模型.

有一些例外,特别是RPC调用.然后生产者成为生产者 - 消费者.它发送一条消息,然后立即等待回复(有一个很好的RabbitMQ手册 - 与RabbtiMQ的RPC相关的直接回复).

通常,您可以确保将消息传递给具有确认(即发布者确认)以及死信交换备用交换的代理.这些内容涵盖了大多数情况,在这种情