小编给大家分享一下春云流怎么实现服务之间的通讯,希望大家阅读完这篇文章之后都有所收获、下面让我们一起去探讨吧!
<强>春云流强>
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 才能输出(); }春云流怎么实现服务之间的通讯