За исключением SimpleMessageListenerContainer
вариант, потребитель не создан для очереди temp. Я не буду использовать SimpleMessageListenerContainer
для некоторых вопросов перед here.Почему потребитель не создан для очереди ActiveMQ Temp?
Следующий код не работает ... (даже очередь температуры не создается)
using (IConnection connection = connectionFactory.CreateConnection())
using (ISession session = connection.CreateSession())
{
IDestination destination = SessionUtil.GetDestination(session, aQueueName);
var replyDestination = session.CreateTemporaryQueue();
// Create a consumer and producer
using (IMessageProducer producer = session.CreateProducer(destination))
{
// Start the connection so that messages will be processed.
connection.Start();
IBytesMessage request = session.CreateBytesMessage(aMsg);
request.NMSReplyTo = replyDestination;
IMessageConsumer consumer = session.CreateConsumer(replyDestination);
consumer.Listener += new MessageListener(this.OnAckRecieved);
// Send a message
producer.Send(request);
ack = this.autoEvent.WaitOne(this.msgConsumeTimeOut, true);
consumer.Close();
consumer.Dispose();
ConnectionFactoryUtils.GetTargetSession(session).DeleteDestination(replyDestination);
}
connection.Close();
session.Close();
Flollowing код работает: бут очередь, кажется, быть стойкая очередь не очередь темпа
using (IConnection connection = connectionFactory.CreateConnection())
using (ISession session = connection.CreateSession())
{
IDestination destination = SessionUtil.GetDestination(session, aQueueName);
var replyDestination = session.CreateTemporaryQueue();
// Create a consumer and producer
using (IMessageProducer producer = session.CreateProducer(destination))
{
// Start the connection so that messages will be processed.
connection.Start();
IBytesMessage request = session.CreateBytesMessage(aMsg);
request.NMSReplyTo = replyDestination;
IDestination tempDestination = this.destinationResolver.ResolveDestinationName(session, request.NMSReplyTo.ToString());
IMessageConsumer consumer = session.CreateConsumer(tempDestination);
consumer.Listener += new MessageListener(this.OnAckRecieved);
// Send a message
producer.Send(request);
ack = this.autoEvent.WaitOne(this.msgConsumeTimeOut, true);
consumer.Close();
consumer.Dispose();
ConnectionFactoryUtils.GetTargetSession(session).DeleteDestination(tempDestination);
}
connection.Close();
session.Close();
с учетом указанной выше кодой (с использованием NmsDestinationAccessor) это working.but он создает постоянную очередь. Поэтому, когда я напрямую использую адрес назначения очереди темпа, он не работает.
Что именно вы подразумеваете под «не созданным», делает ли CreateConsumer() любое исключение или просто возвращает null? –
Ошибка отсутствует. Когда я вижу на webconsole, даже временная очередь не создается для второго кода. Для третьего кода создается только потребитель. –
Добавлен пример теста NUnit из проекта NMS, чтобы показать его в действии. –