我正在使用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中的配置吗?添加超时并重试是正常的吗?任何帮助解决这个问题都会受到赞赏。