HornetQ消费者在N小时后停止接收消息

时间:2012-04-27 19:36:16

标签: jboss jms hornetq

我正在使用独立运行的HornetQ(v2.2.13)使用者来读取JBOSS服务器发布的持久性主题(7.1.1 final)。一切都进行了好几个小时(2-6之间),然后消费者停止接收来自主题的消息。从服务器上的日志文件中,我看到数据不断从管道中抽出,但消费者日志文件表明客户端已停止读取数据。我从客户端推断说,上次读取主题消息的时间是12:00:00,服务器日志说上次将消息推送到主题是14:00:00。

我已经尝试过调整HornetQ配置,但它似乎没有在可持续的时间内工作。

我用来与主题沟通的代码如下。

private TransportConfiguration getTC(String hostname) {
        Map<String,Object> params = new HashMap<String, Object>();
        params.put(TransportConstants.HOST_PROP_NAME, hostname);
        params.put(TransportConstants.PORT_PROP_NAME, 5445);
        TransportConfiguration tc = new TransportConfiguration(NettyConnectorFactory.class.getName(), params);
        return tc;

    }

    private Topic createDestination(String destinationName) {
        Topic topic = new HornetQTopic(destinationName);
        return topic;

    }

    private HornetQConnectionFactory createCF(TransportConfiguration tc) {
        HornetQConnectionFactory cf = HornetQJMSClient.createConnectionFactoryWithoutHA(JMSFactoryType .CF, tc);
        return cf == null ? null : cf;

    }

创建会话并启动会话的代码段:

TransportConfiguration tc = this.getTC(this.hostname);
        HornetQConnectionFactory cf = this.createCF(tc);
        cf.setRetryInterval(4000);
        cf.setReconnectAttempts(10);
        cf.setConfirmationWindowSize(1000000);

        Destination destination = this.createDestination(this.topicName);
        logger.info("Starting Topic Connection");
        try {
            this.connection = cf.createConnection();

            connection.start();
            this.session = connection.createSession(transactional, ackMode);
            MessageConsumer consumer = session.createConsumer(destination);
            consumer.setMessageListener(this);

            logger.info("Started topic connection");
        } catch (Exception ex) {
            ex.printStackTrace();
            logger.error("EXCEPTION!");
        }

1 个答案:

答案 0 :(得分:1)

您不会在服务器端获得有关服务器断开连接的任何日志。

您是否尝试使用客户端故障检查周期和其他ping参数?

虚拟机设置怎么样?

您如何确认这些消息?我看到你创建了它作为事务。你收到消息时确定要提交TX吗?