以下是我的申请
1)客户端应用程序在REQUEST_QUEUE_1上发送带有correlationId的请求消息,并使用correlationId等待RESPONSE_QUEUE_1上的响应消息
2)服务器应用程序从REQUEST_QUEUE_1
接收消息3)Server App处理在步骤2中收到的消息
4)服务器应用程序在RESPONSE_QUEUE_1上发送响应,与作为步骤2中消息的一部分收到的correlationId异步发送。
5)来自第1步的客户端应用程序的线程收到来自RESPONSE_QUEUE_1的响应,用于correlationId
以下是java程序的代码片段,它在客户端和服务器端与队列进行sendMessage和receiveMessage的传递 - https://gist.github.com/graj2014/f580b35579bf8a94029d。
使用jmeter在客户端应用程序的单个请求中测试时,此代码工作正常。但是,同时多个用户请求会使某些消息处于未确认状态,并且相应的响应会对客户端产生超时时间。
带有msgCorrelationId的receiveMessage方法存在问题,该问题与要确认的队列上的消息相匹配。
答案 0 :(得分:0)
问题在于:
if (msgCorrelationId.toString().equals(correlationId)) {
....
channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
break;
}
如果您收到的信息有correlationId
,但提供的信息不多,那么您只需从进动中跳过它们,当然会为它们丢失acknowledgement
。
不清楚为什么你这么做以request-reply
模式的方式,因为RabbitTemplate.sendAndReceive()
会解决问题。