Qpid Proton(Java) - send()方法在发送到ActiveMQ队列时经常挂起

时间:2016-08-25 12:18:53

标签: java activemq qpid

我正在使用Qpid Proton(proton-j-0.13.0)通过AMQP将消息发送到ActiveMQ 5.12.0队列。在ActiveMQ和Java程序在同一台机器上运行的开发机器上,这很好用。在ActiveMQ在单独的服务器上运行的测试环境中,我们看到send()方法在15%到20%的情况下挂起。当send()方法持续时,CPU也保持在100%左右。当send()成功时,它会在0.1秒内完成。

执行发送的语句与此类似:

final Messenger messenger = Messenger.Factory.create();
messenger.start;
messenger.put(message); // one message of 1 KByte
messenger.send(1);
messenger.stop();

我知道Messenger.send(int n)是一种阻塞方法。但是,我不知道为什么会阻止我的电话。我可以添加超时并尝试重新发送消息,但这是一种解决方法而不是正确的解决方案。

从ActiveMQ接收已发送消息的语句与此类似:

this.messenger = Messenger.Factory.create();
this.messenger.start();
this.messenger.subscribe(this.address);

while (this.isRunning) {
    try {
        this.messenger.recv(1);
        while (this.messenger.incoming() > 0) {
            final Message message = this.messenger.get();
            this.messageListener.onMessage(message);
        } catch (final Exception e) {
            LOGGER.error("Exception while receiving messages", e);
        }
}

我错过了一些简单的东西,是一个Qpid新手吗?这可能是ActiveMQ中的配置吗?添加超时并重试是正常的吗?任何帮助解决这个问题都会受到赞赏。

0 个答案:

没有答案