В настоящее время я использую NMS для разработки ActiveMQ на основе приложений (5.6).ActiveMQ: несколько потребителей подключены к одной очереди, но только один потребитель получает все сообщения
У нас есть несколько потребителей (exe), пытающихся получить массу из одной очереди (не тема). Хотя все сообщения просто все идут одному потребителю, хотя я заставил потребителя спать в течение нескольких секунд после получения сообщения. Кстати, мы не хотим, чтобы потребители получали одни и те же сообщения, полученные другими потребителями.
На официальном сайте указано, что мы должны установить префикс Префикса, чтобы определить, сколько сообщений может быть передано потребителю в любой момент времени. И он может быть сконфигурирован и закодирован.
Один из способов, которым я пытался, - это код с использованием класса PrefetchPolicy, связывающего класс ConnectionFactory, как показано ниже.
PrefetchPolicy poli = new PrefetchPolicy();
poli.QueuePrefetch = 0;
ConnectionFactory fac = new ConnectionFactory("activemq:tcp://Localhost:61616?jms.prefetchPolicy.queuePrefetch=1");
fac.PrefetchPolicy = poli;
using (IConnection con = fac.CreateConnection())
{
using (ISession se = con.CreateSession())
{
IDestination destination = SessionUtil.GetDestination(se, queue, DestinationType.Queue);
using (IMessageConsumer consumer = se.CreateConsumer(queue1))
{
con.Start();
while (true)
{
ITextMessage message = consumer.Receive() as ITextMessage;
Thread.Sleep(2000);
if (message != null)
{
Task.Factory.StartNew(() => extractAndSend(message.Text)); //do something
}
else
{
Console.WriteLine("No message received~");
}
}
}
}
}
Но независимо от того, какое значение предварительной выборки я задал, поведение потребителей остается таким же, как и раньше.
И я попытался связать второй способ, чтобы получить результат, а именно настроить конфигурационный файл сервера. Я изменяю файл activemq.xml сервера, как показано ниже. "producerFlowControl =" истинный "MemoryLimit = "5mb"/> "producerFlowControl =" истинный" MemoryLimit = "5mb"> Но хотя я задал dispatchpolicy в сообщения по-прежнему относятся к одному потребителю.
Я хочу знать, что: Можно ли достичь такого поведения, просто настроив XML-файл сервера, чтобы все потребители получали сообщения из одной очереди? Если да, то как настроить это и что не так с моей конфигурацией? Если нет, как я могу использовать коды для достижения цели? Спасибо.