Spring 可以将 Boot 配置为使用 RabbitMQ RPC 同时充当客户端和服务器(网状拓扑)吗?

Can Spring Boot be configured to act as both client and server (mesh topology) with RabbitMQ RPC?

我有 2 个使用 spring 引导开发的应用程序:

应用程序 1:

应用程序 2:

目前它们之间的通信是使用 HTTP 进行的。有没有一种方法可以在 spring 引导程序中配置 rabbitMQ,使其在一个交换器上充当消费者,在另一个交换器上充当生产者?从建筑 POV 来看可以吗?我找不到与此相关的任何文章。任何链接/示例将不胜感激。

我想出了这个:

这是 RabbitMQ 配置文件:

@Configuration
class RabbitCfg {
  @Bean
  fun queue() = Queue("queueName")

  @Bean
  fun exchange() = DirectExchange("exc")

  @Bean
  fun binding(exchange: DirectExchange, queue: Queue) = BindingBuilder.bind(queue).to(exchange).with("routeKey")

  @Bean
  fun jsonMessageConverter() = Jackson2JsonMessageConverter(ObjectMapper())
}

之后我可以从 app1 调用:

val response = rabbitTemplate.convertSendAndReceive(exchange.name, "otherRouteKey", req) as MyObj

并在同一 spring 引导项目中处理来自 app2 的请求:

@Service
@RabbitListener(queues = ["queueName"])
class Receiver {

  @RabbitHandler
  fun handleMenuMessage(obj: MyObj) = OtherObj()

  ...
}

唯一需要的条件是两个应用都在同一个交换机上配置,具有不同的“routeKey”值。