Соединение закрывается через несколько секунд при подключении к ActiveMQ, настроенному на AWS

Я подключаюсь к Apache Active MQ, размещенному на AWS, чтобы интегрировать свое приложение в пользовательский сервис. Мне нужно, чтобы это работало всегда, а не один раз, как сейчас. Приведенный ниже код работает, но только для одного сообщения, мне нужно поддерживать активное соединение все время прослушивания, чтобы получать все сообщения. Вот код.

    using Apache.NMS;
    using Apache.NMS.Util;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;

namespace ApacheMQAsync
{
    class Program
    {

        protected static ITextMessage message = null;


        public static void Main(string[] args)
        {

            Uri connecturi = new Uri("URL:61617");

            Console.WriteLine("About to connect to " + connecturi);

            // NOTE: ensure the nmsprovider-activemq.config file exists in the executable folder.
            IConnectionFactory factory = new Apache.NMS.ActiveMQ.ConnectionFactory(connecturi);

            IConnection connection = factory.CreateConnection("username", "password");

            ISession session = connection.CreateSession();
            IDestination destination = SessionUtil.GetDestination(session, "queue://FOO.BAR");

            Console.WriteLine("Using destination: " + destination);

            // Create a consumer and producer
            IMessageConsumer consumer = session.CreateConsumer(destination);

            consumer.Listener += new MessageListener(OnMessage);
            connection.Start();
            // Wait for the message


            if (message == null)
            {
                Console.WriteLine("No message received!");
            }
            else
            {
                Console.WriteLine("Received message with ID:   " + message.NMSMessageId);
                Console.WriteLine("Received message with text: " + message.Text);
            }
        }

        protected static void OnMessage(IMessage receivedMsg)
        {
            message = receivedMsg as ITextMessage;
            message.Acknowledge();

        }
    }
}

На консоли отображается следующее Сообщение не получено! и через несколько секунд консоль существует?


person Mubashir Koul    schedule 31.05.2018    source источник


Ответы (1)


Там нет настоящей магии, вам нужно что-то сделать, чтобы приложение продолжало работать, например, приостановить ввод с консоли или зациклиться на спящем режиме или вызове другого типа ожидания, а затем проверить что-то, чтобы увидеть, должно ли ваше приложение продолжаться. Клиент JMS не гарантирует, что ваше приложение будет открыто и работает, и вы никогда не должны полагаться на него.

person Tim Bish    schedule 31.05.2018
comment
Спасибо, Тим, ты хочешь зациклить это, например, while(true)? - person Mubashir Koul; 01.06.2018
comment
Делайте все, что работает для вашего приложения и бизнес-логики - person Tim Bish; 01.06.2018