【问题标题】:Microservices - Spring AMQP/RabbitMQ, async calls between microservices best pattern微服务 - Spring AMQP/RabbitMQ,微服务之间的异步调用最佳模式
【发布时间】:2017-11-01 16:03:52
【问题描述】:

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

我正在使用 Rabbit MQ 进行异步 IPC。

尝试使用 RabbitTemplate 的 convertSendAndRecieve 和 direct-replyTo 选项来消费,这使得当前处理线程等待/阻塞异步调用完成,从而使其同步。

我不想使用 convertAndSend 并让服务 A 侦听回复队列并根据关联 ID 进行处理,因为回复队列中将有数千个响应,并且基于关联 ID 映射消息会导致性能不佳.

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

对不起,如果这个问题之前已经解决了,我无法在互联网上得到太多帮助。任何帮助,将不胜感激。

【问题讨论】:

    标签: rabbitmq microservices spring-amqp


    【解决方案1】:

    AsyncRabbitTemplate为你的目的不要阻止来电者,直到回复:https://docs.spring.io/spring-amqp/docs/2.0.0.RELEASE/reference/html/_reference.html#async-template

    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) {
            ...
        }
    
    });
    

    【讨论】:

    • 非常感谢。,正是我想要的。
    猜你喜欢
    • 2018-03-17
    • 2021-06-20
    • 1970-01-01
    • 2020-01-15
    • 2021-07-24
    • 1970-01-01
    • 2021-01-17
    • 2021-01-12
    • 2017-05-08
    相关资源
    最近更新 更多