Messagelistener onmessage не вызывается
У меня возникли некоторые проблемы с вызовом MessageListener
Ниже приведен мой код для вызова MessageListener, он не может вызвать OnMessage. Поток прерывается. Родной подход без слушателя работает отлично. Пожалуйста, предложите, если я что-то упущу.
using System; using System.Configuration; using System.Reflection; using Apache.NMS; using log4net; using Apache.NMS.ActiveMQ; using Apache.NMS.Policies; using Spring.Messaging.Nms.Listener; namespace BIS.JX.QueueManager.QueueManager { public class QueueConnector { private static readonly ILog Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private readonly string _uri; private readonly string _destination; private readonly string _uriusername; private readonly string _uripassword; public QueueConnector() { _uri = ConfigurationManager.AppSettings["Uri"]; _uriusername = ConfigurationManager.AppSettings["Uriusername"]; _uripassword = ConfigurationManager.AppSettings["Uripassword"]; _destination = ConfigurationManager.AppSettings["Queuename"]; } public void ProcessMessage() { try { ConnectionFactory connectionFactory = new ConnectionFactory(_uri); RedeliveryPolicy redeliverypolicy = new RedeliveryPolicy { MaximumRedeliveries = 0 }; connectionFactory.RedeliveryPolicy = redeliverypolicy; connectionFactory.UserName = _uriusername; connectionFactory.Password = _uripassword; using (SimpleMessageListenerContainer queuelistener = new SimpleMessageListenerContainer()) { queuelistener.ConnectionFactory = connectionFactory; queuelistener.DestinationName = _destination; queuelistener.ConcurrentConsumers = 1; queuelistener.SessionAcknowledgeMode = AcknowledgementMode.Transactional; queuelistener.ErrorHandler = new JhaErrorHandler(); queuelistener.ExceptionListener = new JhaExceptionListener(); queuelistener.MessageListener = new JhaMessageListener(); queuelistener.AfterPropertiesSet(); } } catch (Exception ex) { Log.Error(ex.Message); } } public class JhaMessageListener : IMessageListener { private static readonly ILog Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); public void OnMessage(IMessage message) { try { Log.Info(message.NMSMessageId + DateTime.Now); ITextMessage textmessage = message as ITextMessage; if (textmessage != null) Log.Info(textmessage.Text); } catch (Exception ex) { Log.Error(ex.Message); } } } } }
Что я уже пробовал:
Я пробовал без слушателя он работает нормально