写点什么

学会 RabbitMQ 代理的连接,是一种怎样的体验?,mongodb 教程

用户头像
极客good
关注
发布于: 刚刚

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 通道就是输出的名称。这些名称可以用 spring .cloud.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: orders -out



input :



destination: orders-in


account- service 服务的类似配置设置则刚好相反。


spring:



cloud:



stream:



bindings:



output:



destination: orders-in



input :



destination: orders-out


在两个应用程序都启动之后,可以使用其 Web 管理控制台轻松查看 RabbitMQ 代理上声明的交换列表,该控制台位于 htp://192.68.99.100:15672 (guestguest) 。如图 11.2 所示的是隐式创建的交换信息(Exchange),开发人员可能会看到出于测试目的创建的两个目标。



默认情况下,Spring Cloud Stream 将提供一个输入和一个输出消息通道。可以想象一种情况,即我们的系统需要为每种类型的消息通道提供多个目的地。现在可以回到示例系统架构,并考虑每个订单由另外两个微服务异步处理的情况。到目前为止,只有 account-service 服务一直在监听来自 order-service 服务的传入事件。在当前示例中,product-service 服务将是传入订单的接收者,它在这种情况下的主要目标是管理可用产品的数量,并根据订单细节减少它们。它要求我们在 order-service 服务中定义两个输入和输出消息通道,因为我们仍然有基于直接 RabbitMQ 交换信息的点对点通信,其中每个消息都可以由一个使用者处理。



在这种情况下,我们应该使用 @Input 和 @Output 方法声明两个接口。每个方法都必须返回一个 channel 对象。Spring Cloud Stream 提供两个可绑定的消息组件一用于出站通信的 MessageChannel,以及它的扩展——用于入站通信的 SubscribableChannel.这是与 product-service 服务交互的接口定义。已创建用于通过 account-service 服务进行消息传递的类似接口。


public interface ProductOrder {



@Input



SubscribableChannel productordersIn() ;



@output



MessageChannel productOrdersOut() ;



}


下一步是通过使用 @EnableBinding(value- {Accountrder.as,Productorder.cass})来注解其主类以激活应用程序的声明组件。现在,可以使用它们的名称在配置属性中引用这些通道,如 sringcloudstream.bindings.productOrdersOut.destination- product-orders-in。使用 @Input 和 @Output 注解时,可以通过指定通道名称来自定义每个通道名称,示例如下。


public interface Productorder {



@Input ("productordersIn")



SubscribableChannel ordersIn() :



@output ("productordersOut")



MessageChannel ordersOut() ;



}



【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


于自定义接口声明,Spring Cloud Stream 将生成实现该接口的 bean.但是,仍然必须在负责发送消息的 bean 中访问它。与前面的示例相比,直接注入绑定通道会更简便。以下是当前产品订单消息发送者的 bean 实现。还有一个类似的 bean 实现,它可以将消息发送到 account-service.


@Service



public class ProductorderSender {



@Autowired



private MessageChannel output;



@Autowired



public. SendingBean (@Qualifier ("productordersout") MessageChannel



output) {



this.output = output ;



}



public boolean send(order order) {



return this . output . send (MessageBui lder。withPayload (order) . build());



? ? }

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
学会RabbitMQ代理的连接,是一种怎样的体验?,mongodb教程