微服务-Spring AMQP/RabbitMQ,微服务之间异步调用的最佳模式



我有三个微服务-服务A、B和C。服务A应该异步调用B和C,A应该构建基于响应的B和C响应。

我使用Rabbit MQ进行异步ipc。

尝试使用RabbitTemplate的convertSendAndRecieve和directreplyTo选项,这使当前处理线程等待/阻止异步调用完成,从而使其同步。

我不想使用convertAndSend,让服务A监听回复队列并基于相关性id进行处理,因为回复队列中会有数千个响应,并且基于相关性id映射消息会导致性能较差。

为每个会话创建单独的队列也不是一种选择,因为它有自己的注意事项(从所有集群获得新队列创建的确认也会影响性能)

很抱歉,如果这个问题以前已经解决了,我在网上找不到太多帮助。如有任何帮助,我们将不胜感激。

AsyncRabbitTemplate供您使用。在回复之前不要阻止调用者:https://docs.spring.io/spring-amqp/docs/2.0.0.RELEASE/reference/html/_reference.html#async-模板:

1.6版引入了AsyncRabbitTemplate。这与AmqpTemplate上的sendAndReceive(和convertSendAndReceive)方法类似,但它们没有阻塞,而是返回一个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) {
...
}
});

最新更新