春云流怎么实现服务之间的通讯

  介绍

小编给大家分享一下春云流怎么实现服务之间的通讯,希望大家阅读完这篇文章之后都有所收获、下面让我们一起去探讨吧!

<强>春云流

srp云总线的底层实现就是春云流,春云流的目的是用于构建基于消息驱动(或事件驱动)的微服务架构.Spring云流本身对春天的消息,Spring Integration,弹簧引导致动器,弹簧引导外部化配置等模块进行封装(整合)和扩展,下面我们实现两个服务之间的通讯来演示春云流的使用方法。

<强>整体概述

按涸屏髟趺词迪址裰涞耐ㄑ?

服务要想与其他服务通讯要定义通道,一般会定义输出通道和输入通道,输出通道用于发送消息,输入通道用于接收消息,每个通道都会有个名字(输入和输出只是通道类型,可以用不同的名字定义很多很多通道),不同通道的名字不能相同否则会报错(输入通道和输出通道不同类型的通道名称也不能相同),绑定器是操作RabbitMQ或卡夫卡的抽象层,为了屏蔽操作这些消息中间件的复杂性和不一致性,绑定器会用通道的名字在消息中间件中定义主题,一个主题内的消息生产者来自多个服务,一个主题内消息的消费者也是多个服务,也就是说消息的发布和消费是通过主题进行定义和组织的,通道的名字就是主题的名字,在RabbitMQ中主题使用交流实现,在卡夫卡中主题使用主题实现。

<强>准备环境

创建两个项目spring-cloud-stream-a和spring-cloud-stream-b, spring-cloud-stream-a我们用春云流实现通讯,spring-cloud-stream-b我们用春云流的底层模块Spring Integration实现通讯。

两个项目的POM文件依赖都是:

& lt; dependencies>   ,,,& lt; dependency>   ,,,,,& lt; groupId> org.springframework.cloud   ,,,,,& lt; artifactId> spring-cloud-stream   ,,,& lt;/dependency>      ,,,& lt; dependency>   ,,,,,& lt; groupId> org.springframework.cloud   ,,,,,& lt; artifactId> spring-cloud-stream-binder-rabbit   ,,,& lt;/dependency>   ,,,& lt; dependency>   ,,,,,& lt; groupId> org.springframework.boot   ,,,,,& lt; artifactId> spring-boot-starter-test   ,,,,,& lt; scope> test   ,,,& lt;/dependency>   ,,,& lt; dependency>   ,,,,,& lt; groupId> org.springframework.cloud   ,,,,,& lt; artifactId> spring-cloud-stream-test-support   ,,,,,& lt; scope> test   ,,,& lt;/dependency>   & lt;才能/dependencies>

spring-cloud-stream-binder-rabbit是指绑定器的实现使用RabbitMQ。

项目配置内容的应用程序。属性:

spring.application.name=spring-cloud-stream-a   server.port=9010      #设置默认绑定器   spring.cloud.stream.defaultBinder =,兔子      spring.rabbitmq.host=127.0.0.1   spring.rabbitmq.port=5672   spring.rabbitmq.username=客人   spring.rabbitmq。密码=客人
 spring.application.name=spring-cloud-stream-b
  server.port=9011
  
  #设置默认绑定器
  spring.cloud.stream.defaultBinder =,兔子
  
  spring.rabbitmq.host=127.0.0.1
  spring.rabbitmq.port=5672
  spring.rabbitmq.username=客人
  spring.rabbitmq。密码=客人

启动一个rabbitmq:

docker  pull  rabbitmq: 3-management   docker  run  -d ——hostname  my-rabbit ——name  rabbit  -p  5672:5672  -p  15672:15672  rabbitmq: 3-management

<强>编写一项目代码

在一项目中定义一个输入通道一个输出通道,定义通道在接口中使用@Input和@Output注解定义,程序启动的时候春云流会根据接口定义将实现类自动注入(春云流自动实现该接口不需要写代码)。

服务输入通道,通道名称ChatExchanges.A。输入,接口定义输入通道必须返回SubscribableChannel:

public  interface  ChatInput  {   String 才能;INPUT =,“ChatExchanges.A.Input";   @Input才能(ChatInput.INPUT)   SubscribableChannel 才能输入();   }

服务输出通道,通道名称ChatExchanges.A。输出,输出通道必须返回MessageChannel:

public  interface  ChatOutput  {      String 才能;OUTPUT =,“ChatExchanges.A.Output";      @Output才能(ChatOutput.OUTPUT)   MessageChannel 才能输出();   }

春云流怎么实现服务之间的通讯