Сообщения очереди в RabbitMQ складываются и ожидают одного потребителя, пока другие потребители доступны.
Мы используем RabbitMQ в качестве нашей службы обмена сообщениями. Мы используем bunny для создания подключений и настройки очередей с прохождением сообщений.
В нашей настройке rails с использованием bunny у нас возникла проблема, когда у нас есть одна очередь с 8 потребителями, которые слушают сообщения в этой очереди. Когда поступают сообщения, в идеале они должны выполняться циклически по примеру потребителей: 4 сообщения в очереди, потребитель 1 принимает сообщение 1, - потребитель 1 занят, потребитель 2 принимает сообщение 2, потребитель 2 занят, потребитель 3 принимает сообщение 3 и т. д.
Однако проблема, с которой мы сталкиваемся, заключается в том, что в очереди 4 сообщения, потребитель 1 забирает сообщение 1, потребитель 1 занят, потребитель 2-8 доступны, но сообщения 2-4 складываются в очередь, ожидая, что потребитель 1 станет доступным, и обрабатывать сообщения.
Мне кажется, что я провел кучу исследований и просто не могу понять, как остановить накопление и ожидание сообщений на одном потребителе.
У кого-нибудь был опыт в этом или есть идеи, как решить эту проблему?
conn = Bunny.new(bunny[0])
conn.start
ch = conn.create_channel
q = ch.queue("#{record_queue_name}", :durable => true)
q.subscribe(:manual_ack => true, :arguments => {"x-priority" => 10}, :block => true) do |delivery_info, properties, payload|
ch.acknowledge(delivery_info.delivery_tag, false)
Мы хотим, чтобы в любое время, когда какие-либо сообщения отправлялись в RabbitMQ, потребитель забирал их в порядке очереди, а не несколько сообщений, складывающихся в стопку, ожидающих занятого потребителя, когда другие доступны.
РЕДАКТИРОВАТЬ: Как воспроизвести: запустить 3 потребителя одновременно. протолкнуть 6 сообщений - потребители 1–3 теперь заняты 3 сообщениями в очереди. перезапустите 2 и 3, когда 2 и 3 снова прослушивают, 3 сообщения все еще ждут в очереди на потребителе 1. Потребители 2 и 3 все еще доступны.
Перезапустите потребителя 1, теперь 3 сообщения в очереди сначала поступают от сервера к вновь перезапущенным потребителям 2 и 3.
Мне нужны сообщения, чтобы первым пришел первый сервер, независимо от того, перезапускаются ли потребители.
x-
черезsubscribe
. Если вы предоставите код, который надежно воспроизводит это в репозитории, который я могу клонировать и запускать, я могу исследовать. - person Luke Bakken   schedule 31.07.2019