连接到 AWS 上设置的 ActiveMQ 时连接会在几秒钟后关闭

Posted

技术标签:

【中文标题】连接到 AWS 上设置的 ActiveMQ 时连接会在几秒钟后关闭【英文标题】:Connection closes after few seconds when connecting to ActiveMQ set up on AWS 【发布时间】:2018-11-10 22:29:19 【问题描述】:

我正在连接到托管在 AWS 上的 Apache Active MQ,以将我的应用程序集成到自定义服务中。我需要一直保持这种运行状态,而不是像现在这样一次。下面的代码有效,但仅适用于一条消息,我需要始终保持连接处于活动状态,以便接收所有消息。 这是代码。

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

        
    

在控制台上显示如下 没有收到消息! 几秒钟后控制台存在?

【问题讨论】:

【参考方案1】:

那里没有真正的魔法,您需要做一些事情来保持您的应用程序运行,例如暂停控制台输入或循环睡眠或其他等待类型的调用,然后检查您的应用程序是否应该继续运行。 JMS 客户端不能保证让您的应用程序保持打开和运行,您永远不应该依赖它。

【讨论】:

谢谢蒂姆,你的意思是把它放在一个循环中,比如 while(true)? 为您的应用程序和业务逻辑做任何事情

以上是关于连接到 AWS 上设置的 ActiveMQ 时连接会在几秒钟后关闭的主要内容,如果未能解决你的问题,请参考以下文章

连接到 Mysql AWS RDS 实例时工作台错误 10060

通过 SSH 隧道连接到 .Net Core 中的 AWS DocumentDb

JPA 无法从 Beanstalk 连接到 AWS RDS,但它可以在本地工作

如何通过编程设置用户名和密码来连接到 ActiveMQ 服务器?

使用 IP 地址连接到 AWS EC2

连接到 Amazon AWS:权限被拒绝