我有三个微服务 - 服务A,B和C. 服务A应该异步调用B和C,A应该基于B和C响应构建响应。
我正在使用Rabbit MQ进行异步ipc。
尝试使用了带有direct-replyTo选项的RabbitTemplate的convertSendAndRecieve,这使得异步调用中的当前处理线程等待/阻塞完成,这使得它同步。
我不想使用convertAndSend并让服务A监听回复队列并基于相关ID进行处理,因为在回复队列中会有数千个响应,并且根据相关ID映射消息会导致性能不佳
为每个会话创建单独的队列也不是一个选择,因为它有自己的警告(在新队列创建时从所有集群获得确认也会影响性能)
很抱歉,如果此问题已经解决,我无法在互联网上获得这方面的帮助。任何帮助,将不胜感激。
答案 0 :(得分:1)
为了您的目的,AsyncRabbitTemplate
在回复之前不会阻止来电者:https://docs.spring.io/spring-amqp/docs/2.0.0.RELEASE/reference/html/_reference.html#async-template:
1.6版引入了
AsyncRabbitTemplate
。这与sendAndReceive
上的convertSendAndReceive
(和AmqpTemplate
}方法类似,但不是阻止,而是返回ListenableFuture
。
RabbitConverterFuture<String> future = this.template.convertSendAndReceive("foo");
future.addCallback(new ListenableFutureCallback<String>() {
@Override
public void onSuccess(String result) {
...
}
@Override
public void onFailure(Throwable ex) {
...
}
});