rabbitmq amqp-侦听来自使用者的ack消息

rabbitmq amqp-侦听来自使用者的ack消息,rabbitmq,amqp,producer-consumer,Rabbitmq,Amqp,Producer Consumer,我有一个制片人和经纪人在同一台机器上。制作人发送如下消息: 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,

我有一个制片人和经纪人在同一台机器上。制作人发送如下消息:

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呢

生产者和消费者通常不会互动。这是由AMQP协议设计的。例如,消费特定消息可能会在消息发布后很长一段时间内完成,而让生产者长时间运行是没有意义的。另一个例子是,当发布者向代理发送一条消息时,由于路由逻辑,该消息会复制到多个队列,从而导致歧义(因为多个使用者可以确认同一条消息)。AMQP协议是异步的(主要是异步的),让发布者知道其消息被使用并不符合AMQP异步模型

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

通常,您可以确保消息与and一起交付给代理。这些涵盖了大多数情况,在这些情况下,消息可能会从其正常流中丢失