当前位置: 首页 > 知识库问答 >
问题:

即使wireFormat.maxInactivityDuration=0,ActiveMQ连接也会超时

易和怡
2023-03-14

我正在收听一个Activemq队列。

我的配置如下:

ACTIVEMQ_BROKER_URL =failover:(tcp://LON6QAEQTAPP01:61616?wireFormat.maxInactivityDuration=0)

从控制台日志中,我可以看到尝试重新连接到该服务器

[2014-08-20 08:57:43,303]INFO 236[ActiveMQ Task-1]-org.apache.activemq.transport.failover.FailoverTransport.doReconnect(FailoverTransport.java:1030)-成功连接到tcp://LON6QAEQTAPP01:61616?wireFormat.maxInactivityDuration=0[2014-08-20 08:57:43,355]INFO 288[ActiveMQ Task-1]-org.apache.activemq.transport.failover.FailoverTransport.doReconnect(FailoverTransport.java:1030)-成功连接到tcp://LON6QAEQTAPP01:61616?wireFormat.maxInactivityDuration=0[2014-08-20 08:57:43,374]INFO 307[ActiveMQ Task-1]-org.apache.activemq.transport.failover.FailoverTransport.doReconnect(FailoverTransport.java:1030)-成功连接到tcp://LON6QAEQTAPP01:61616?wireFormat.maxInactivityDuration=0

我仍然无法使用该消息。我正在使用以下代码尝试从代码端处理它,但仍然无法使连接持久化

try
        {
            connection.start();
            while (true)
            {
                try
                {
                    if (connection.isClosed() || connection.isTransportFailed() || session.isClosed() || !connection.getTransport().isConnected())
                    {
                        log.info("Connection was reset, re-connecting..");
                        connection.cleanup();
                        init();
                        connection.start();
                    }
                }
                catch (Throwable t)
                {
                    init();
                    log.error("Connection was reset, re-connecting in exception block", t);
                }
                Thread.sleep(30000L);
            }


private void init() throws Exception
{
    init(brokerURL, queueName, userName, password, manual);
}

public void init(String brokerURL, String queueName, String userName, String password, boolean manual) throws Exception
{
    this.manual = manual;
    this.brokerURL = brokerURL;
    this.queueName = queueName;
    this.userName = userName;
    this.password = password;
    ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(userName, password, brokerURL);
    connection = (ActiveMQConnection) connectionFactory.createConnection();
    connection.addTransportListener(new TransportListener()
    {

        @Override
        public void transportResumed()
        {
            log.info("Transport Resumed ");

        }

        @Override
        public void transportInterupted()
        {
            log.info("Transport Interupted ");

        }

        @Override
        public void onException(IOException arg0)
        {
            arg0.printStackTrace();
            log.error("Transport Exception: " + arg0.getMessage());
        }

        @Override
        public void onCommand(Object arg0)
        {
            // TODO Auto-generated method stub

        }
    });

    connection.setExceptionListener(this);
    connection.setCloseTimeout(10);
    session = (ActiveMQSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);// CLIENT_ACKNOWLEDGE
    Destination destination = session.createQueue(queueName);
    MessageConsumer consumer = session.createConsumer(destination);
    consumer.setMessageListener(this);
}

有人可以帮助我,让我如何让这种联系一直活跃起来。它通常在不活动40分钟左右后超时。

共有1个答案

汝和裕
2023-03-14

试图以你现在的方式强行重新连接一个打开的连接绝对不会对你有好处。如果您想自己处理连接中断,您需要拆除连接并创建一个新的连接。您真正应该做的是找出是什么关闭了您的连接,可能是防火墙关闭了不活动的连接或负载平衡器。看看你的环境,看看还有什么会让你与外界失去联系。

如果配置为这样做,则代理可以重新平衡集群中的客户机。您是否在群集环境中使用多个客户端等?

 类似资料:
  • 问题内容: 我有一个带有2个表的MySql数据库: 国家是公正的。 结果是a ,a和a 。 并非所有国家/地区在每个日期都有结果。 如何创建一个查询,列出所有国家及其特定结果,但仍然列出它们,并且如果结果表上没有结果,则显示0? 问题答案: 在两个表之间使用LEFT JOIN 要显示0(对于该列),如果没有结果,请使用IFNULL。

  • 问题内容: 与MySQL的Hibernate连接未关闭。在大约10秒钟内单击10次后,我从MySQL Workbench(在我的开发机中。我是唯一的用户)获得此连接统计信息。MySQL Workbench Server状态 我已经准备好了 C3P0并正在运行(从log4j中检查,与C3P0相关的问题没有问题,似乎正在运行) 一个ServletReqestListener,它检查是否存在打开的会话,

  • 问题内容: 我想将特定的表转储到我的远程服务器数据库中,效果很好,但是其中一个表是9m行,我得到: 因此,在在线阅读后,我了解到我需要增加我的max_allowed_pa​​cket,并有可能将其添加到我的命令中。 所以我运行以下命令来转储我的表: 并且由于某种原因,我仍然得到: 难道我做错了什么? 它的记录很奇怪,只有900万条记录…不太大。 问题答案: 尝试将选项添加到命令中;它在大型桌子上工

  • 我在kafka connect连接器中安装了运行confluent hub安装的JDBC连接器——没有提示confluent Inc/kafka connect JDBC:10.2.5,但当我尝试使用实现新接收器时,出现以下错误:找不到任何实现连接器且名称与io匹配的类。汇合的。连接jdbc。JdbcSinkConnector 我想用的水槽 我正在使用confluentinc/cp kafka c

  • 问题内容: 我有一个包含10个元素的div,这些元素将被逐个更新,延迟时间为2秒。下面是相同的代码 但是,当我运行它时,所有元素都会一起更新。该程序只是添加一个延迟添加一个开始,并且所有元素都一起更新(被标记)。如何制作代码来逐一标记元素? 问题答案: 您正在打破React的两个基本规则: 不要直接改变状态 如果根据现有状态更新状态,请使用回调形式,因为状态更新可能是异步的(无论如何,在您的示例中

  • 水槽新手。 假设我有一个代理,它有一个 avero 源、一个 hdfs 接收器和一个文件通道。 假设在某个时候接收器无法写入hdfs。源是否会继续接受事件,直到通道填满? 或者即使文件通道未满,源也会停止接受事件吗?