我在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
}
}
}
但是它不起作用,因为消费者在应答(或拒绝)先前的消息之前不会收到任何其他消息。
我的代码或理解有什么问题?