微服务-Spring AMQP/RabbitMQ,微服务之间的异步调用最佳模式
我有三个微服务-服务A、B和C。 服务A应该异步调用B和C,A应该构建基于B和C响应的响应 我使用rabbitmq实现异步ipc 尝试使用RabbitTemplate的convertSendAndRecieve和direct replyTo选项,这使当前处理线程等待/阻止异步调用完成,从而使其同步 我不想使用convertAndSend并让服务A基于相关id侦听应答队列和进程,因为应答队列中会有数千个响应,而基于相关id映射消息会导致性能低下 为每个会话创建单独的队列也不是一个选项,因为它有自己的警告(在创建新队列时获得所有集群的确认也会影响性能)微服务-Spring AMQP/RabbitMQ,微服务之间的异步调用最佳模式,rabbitmq,microservices,spring-amqp,Rabbitmq,Microservices,Spring Amqp,我有三个微服务-服务A、B和C。 服务A应该异步调用B和C,A应该构建基于B和C响应的响应 我使用rabbitmq实现异步ipc 尝试使用RabbitTemplate的convertSendAndRecieve和direct replyTo选项,这使当前处理线程等待/阻止异步调用完成,从而使其同步 我不想使用convertAndSend并让服务A基于相关id侦听应答队列和进程,因为应答队列中会有数千个响应,而基于相关id映射消息会导致性能低下 为每个会话创建单独的队列也不是一个选项,因为它有自己
对不起,如果这个问题以前已经解决了,我在网上找不到太多的帮助。任何帮助都将不胜感激 有
AsyncRabbitTemplate
出于您的目的,在收到以下回复之前,不要阻止调用者:
版本1.6引入了异步rabbitmplate
。这与amqpmetplate
上的sendAndReceive
(和convertSendAndReceive
)方法类似,但它们不是阻塞,而是返回一个ListenableFuture
RabbitConverterFuture=this.template.convertSendAndReceive(“foo”);
future.addCallback(新ListenableFutureCallback(){
@凌驾
成功时的公共void(字符串结果){
...
}
@凌驾
失效时的公共无效(可丢弃的ex){
...
}
});
非常感谢,这正是我想要的。
RabbitConverterFuture<String> future = this.template.convertSendAndReceive("foo");
future.addCallback(new ListenableFutureCallback<String>() {
@Override
public void onSuccess(String result) {
...
}
@Override
public void onFailure(Throwable ex) {
...
}
});