RabbitMq使用者只有在确认或否定上一条消息后才能收到另一条消息

时间:2018-09-19 14:20:37

标签: rabbitmq message-queue

我在RabbitMq中有一个队列,该队列订阅了一些计算结果的交换。一个计算可以产生多个结果,我想处理包含所有计算结果或全部不属于一个计算结果的消息。如果服务失败,则不会进行任何确认,因此它们将被另一个服务实例重新排队和处理。

我的消费者:

class ResultConsumer(channel: Channel,
                 private val resultListener: ResultListener)
: DefaultConsumer(channel) {


override fun handleDelivery(consumerTag: String, envelope: Envelope, properties: AMQP.BasicProperties, body: ByteArray) {
    val result = String(body)

    // ....

    if (status != null && status.equals("success")) {
        if (allSubresultsDelivered(result)) {
            channel.basicAck(envelope.deliveryTag, true)
        }
        return
    }
}

}

但是它不起作用,因为消费者在应答(或拒绝)先前的消息之前不会收到任何其他消息。

我的代码或理解有什么问题?

0 个答案:

没有答案