gpt4 book ai didi

java - rabbitmq 具有基于属性的自定义排序

转载 作者:行者123 更新时间:2023-11-30 06:27:54 24 4
gpt4 key购买 nike

我们对带有确认的基本兔子 mq 队列进行了研发。我们现在想更进一步,使用路由 key 之类的东西按用户名拆分 channel 。 (https://www.cloudamqp.com/blog/2015-09-03-part4-rabbitmq-for-beginners-exchanges-routing-keys-bindings.html)。

但是,我们需要对每个用户使用自定义排序,我们从上游获取的 json 有一个名为 sequence 的参数。将数据推送到rabbitmq的服务可能会从上游获取第一个序列号为2的json,然后获取1。有没有办法将 seuqence 数字 2 的 json 推送到队列,但只有在队列收到 1 的 json 后才将其传递并交付了它。

基本上我们想知道的是是否有一种方法可以在rabbitmq上使用自定义排序来基于此sequence参数进行消息传递,而不需要有单独的服务来维护这个顺序。

最佳答案

Basically what we are wondering is whether there is a way to use custom ordering on rabbitmq for message delivery based on this sequence parameter without the need to have a separate service to maintain this order.

没有。请参阅https://www.rabbitmq.com/semantics.html :

From RabbitMQ release 2.7.0, messages are always held in the queue in publication order, even in the presence of requeueing or channel closure.

看来您的用例并不容易得到支持。

当然,如果您确实想要重新排队(并且您不想将消息保留在消费者处),您可以为您的消费者实现类似以下伪代码的内容:

expected_message_id = 0
while (true) {
m = receive_message(queue)
if (m.id == expected_message_id) {
process(m)
m.acknowledge()
expected_message_id++
} else {
republish_to_queue(m, queue) // might use old exchange, or pick a new-one for this type of back-channel
}
}

显然,这意味着额外的网络/处理负载 - 消息可能会被多次传递和丢弃。

关于java - rabbitmq 具有基于属性的自定义排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46741619/

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