srilaxmi.jakki Ответов: 0

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);

                }

            }

        }
    }
}


Что я уже пробовал:

Я пробовал без слушателя он работает нормально

0 Ответов