gpt4 book ai didi

rabbitmq amqp - 监听来自消费者的ack消息

转载 作者:行者123 更新时间:2023-12-02 21:57:02 27 4
gpt4 key购买 nike

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

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 的目的是让代理将消息出列。

但是我的生产者如何才能知道消费者发送的确认呢?

最佳答案

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

也有异常(exception),特别是 RPC 调用。然后生产者就变成了生产者-消费者。它发送一条消息,然后立即等待回复(有一本很好的 RabbitMQ 手册 - Direct reply-to 与 RabbtiMQ 的 RPC 相关)。

一般来说,您可以通过 Confirms (aka Publisher Acknowledgements) 确保将消息传送到代理。与Dead Letter Exchanges一起和 Alternate Exchanges 。这些涵盖了消息可能从正常流中丢失的大多数情况。

关于rabbitmq amqp - 监听来自消费者的ack消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27573359/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com