2017-10-06 125 views

回答

0

在一个服务中,您将发送该消息,并在另一个服务中接收它。在这个例子中,你现在有两个项目。在发送服务中,您有RabbitTemplate,而在其他服务中,Receiver使用SimpleMessageListenerContainer和MessageListenerAdapter bean。确保绑定,队列和交换配置相同,并且服务都连接到相同的RabbitMQ服务器。

+1

非常感谢,它按预期工作。只需一次确认,在发送服务中,我没有为RabbitTemplate指定任何配置。我只在application.properties文件中指定了rabbitmq连接参数。 Spring Boot是否会自动创建带有这些连接参数的RabbitTemplate bean?请确认。 – Krish

+0

正确。您了解启动魔术正确:https://docs.spring.io/spring-boot/docs/1.5.7.RELEASE/reference/htmlsingle/#boot-features-amqp,并查看默认的“RabbitProperties”:https: //github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-autoconfiguration/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitProperties.java –

+0

@ArtemBilan感谢您的确认... – Krish

1

你需要的是这样的事情(数字从我最近,这也说明blog post采取更详细的代码示例):

Event producer and consumers are loosely coupled since an exchange serves as intermediary.

  • 在这里,作为一个例子,CRUD事件像“customer.created”或“order.deleted”被认为是
  • 任何微服务都可以充当Event Producer并通过RabbitTemplate发送事件给事件交换,这是由Spring AMQP提供的,并且可以被注入任何Spring Bean 。
  • 同一个微服务的一组实例共享一个队列。
  • 消费微服务通过声明@Bean s来表示QueueBinding具有相同属性,从而声明它们的队列以及队列和事件交换之间的绑定。
  • 哪些事件将被各微服务簇
  • 所有微服务必须共享相同的事件交换通过声明Exchange类型的@Bean具有相同名称交换被接收的绑定定义。
+0

精美地解释。谢谢。 如何处理多个交换,多个队列中的服务? – Krish

+0

你只需声明多个'Queue'和潜在的'Exchange',并用多个'Binding'将它们连接在一起 – Tom