自定义与RabbitMQ代理的连接
在前面的章节中,已经介绍了使用Docker镜像启动RabbitMQ代理的方法,因而有必要记住这个命令。它将启动一个带RabitMQ的独立Docker容器,可在端口5672下使用,其用户界面Web控制台可在端口15672 下使用。
docker run -d --name rabbit -p 15672:15672 -P 5672:5672 rabbi tnq : management
应使用application.yml文件中的spring.rabbit. *属性覆盖默认的RabbitMQ地址。
spring:
rabbi tmq:
host: 192.168.99.100
port: 5672
默认情况下,Spring Cloud Stream会为通信创建主题交换信息。这种类型的交换更适合发布/订阅交互模型。开发人员也可以使用exchangeType 属性覆盖它,就像在application.yml 的片段中一样,如下所示。
spring:
cloud:
stream:
rabbit:
bindings:
output:
producer:
exchangeTyper direct
input:
consumer:
exchangeType: direct
开发人员应该为order-service服务和account-service服务提供相同的配置设置。这里不必手动创建任何交换信息。如果它不存在,则它会在启动期间由应用程序自动创建。否则,应用程序只会绑定到该交换信息。默认情况下,它创建交换信息时所使用的名称,对于@Input通道就是输入的名称,对于@Output通道就是输出的名称。这些名称可以用springcloud.stream.bindings.output.destination和
spring.cloud.stream.bindings.input.destination属性覆盖,其中的输入和输出都是通道的名称。此配置选项不仅是Spring Cloud Stream功能的“个很好的补充,而且是用于关联服务间通信中的输入和输出目标的键值设置。
要解释为什么会发生这种情况也非常简单。在我们的示例中,一方面, order-service 是消息源应用程序,因而它会将消息发送到输出通道。然后,另一方面,account-service 服务将侦听输入通道上的传入消息。如果order- service服务的输出通道和account-service服务的输入通道未引用代理上的相同目标,则它们之间的通信将失败。总之,我们决定使用名称为order-out和orders-in的目的地,并且为order-service服务提供了以下配置。
spring:
cloud :
stream:
bindings :
output:
destination: