Spring Cloud Bus

Spring Cloud是按照spring的配置对一系列微服务框架的集成。
Spring生态中与消息中间件相关的几个项目有:spring messaging、spring integration、spring cloud stream、spring cloud bus。


Spring Cloud Bus

spring cloud bus是Spring Cloud中的微服务框架之一,用于实现微服务之间的通信。
spring cloud bus整合java的事件处理机制和消息中间件消息的发送和接受,主要由发送端、接收端和事件组成。针对不同的业务需求,可以设置不同的事件,发送端发送事件,接收端接受相应的事件,并进行相应的处理。
Spring Cloud Bus将Spring的事件处理机制和消息中间件消息的发送和接收整合起来,可以轻松的将分布式应用中连接有消息中间件的多个服务节点连接起来,实现多个服务节点消息互通。
Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来。它可以用于广播配置文件的更改,或者服务之间的通讯,也可以用于监控。
Spring Cloud Bus 是用Spring Cloud Stream来实现消息的发布订阅的,所以配置中有许多stream相关的配置。
spring cloud bus 内置了两个endpoint,一个是/bus/refresh,一个是/bus/env,它们被认为是actuator的env和refresh的分布式版本。
Spring Cloud Bus 默认订阅发布的topic是springCloudBus。input channel是springCloudBusInput,用来订阅处理消息。output channel是springCloudBusOutput,用来发布消息到总线。比如/bus/refresh刷新配置事件,就是通过springCloudBusOutput channel将事件写入到springCloudBus这个topic中去。

Spring Cloud Bus 扩展消息总线
https://www.jianshu.com/p/093ed9816993
使用kafka作为springcloud bus的消息总线,以及如何自定义总线事件
http://www.voidcn.com/article/p-phpbizrd-bnz.html


Spring Cloud Stream

Spring Cloud Stream是一个构建消息驱动应用的微服务框架。它构建在Spring Boot之上,通过Spring Integration提供了和消息代理的连接。Spring Cloud Stream为一些供应商的消息中间件产品提供了个性化的自动化配置实现(目前仅支持RabbitMQ和Kafka),同时引入了持久发布订阅、消费者组和分区的概念。
一个业务会牵扯到多个任务,任务之间是通过事件触发的,这就是Spring Cloud stream要干的事。
可以将@EnableBinding注释添加到应用程序,以便立即连接到消息代理,并且可以将@StreamListener添加到方法中,以使其接收流处理的事件。

Spring Cloud Stream初窥
http://blog.csdn.net/u012702547/article/details/78652554
使用 Spring Cloud Stream 构建消息驱动微服务
https://www.jianshu.com/p/fb7d11c7f798


Spring Integration

集成Spring应用之间的系统,Spring提供了分布式的调用,方式有RMI,HttpInvok,Hessian和Burlap。
Spring Ingegration 提供了基于Spring的企业集成模式(EIP,Enterprise Integration Patterns)的实现。Spring Integration 主要解决的问题是不同系统之间交互的问题,通过异步消息驱动来达到交互系统之间的松耦合。
Spring Integration 通过更高层次的抽象把任何的数据通过管道一样的把数据导向下一个需要的地方,把各种系统杂合到一起,组成一个无缝的系统。


Spring Integration 组成

Spring Integration 主要有Message、Channel、EndPoint组成:
Message
Message是用来在不同部分之间传递的数据。由两部分组成:消息头(header)和消息体(payload 负载)。消息头表示的元数据就是解释消息体的内容,包含消息Id、时间戳、优先级等信息。消息体可以是任何数据类型,是真正要交互的数据。
Channel
消息生产者发送消息到通道(Channel),消息消费者从通道(Channel)接收消息。顶级接口MessageChannel中提供了send方法发送消息,它有两大子接口:PollableChannel (可轮询通道)和SubscribableChannel(可订阅通道)。Channel可以对Message组件解耦,可以在Channel上设置拦截器,拦截器作用在Channel上,可以实现编解码、加解密、鉴权、日志、监控等操作。
EndPoint
消息端点(Message EndPoint)是处理消息(Message)的组件,它还可以控制通道的路由。在Channel中不能处理消息,对消息的处理只能在这里完成。

通道

PollableChannel具备轮询获取消息的能力,其中提供了receive方法。
SubscribableChannel发送消息给订阅者,其中提供了subscribe和unsubscribe方法。
常用的消息通道:
DirectChannel是Spring Integration默认的消息通道,它允许将消息发送给为一个订阅者,然后阻碍发送直到消息被接收。
PublishSubscribeChannel允许广播消息给所有订阅者。
QueueChannel允许消息接收者轮询获取消息到一个队列。
PriorityChannel可按照消息头priority优先级将数据存储到队列。
RendezvousChannel确保每一个接收者都接收到消息后再发送消息。
ExecutorChannel可绑定一个多线程的task executor。

通道拦截器

Spring Integration给消息通道提供了通道拦截器(ChannelInterceptor),用来拦截发送和接收消息的操作。只需要实现ChannelInterceptor接口。
通过如下代码给所有的channel增加拦截器 channel.addInterceptor(
channelInterceptor1);

消息端点

可用的消息端点有以下几类:
(1) Channel Adapter
通道适配器(Channel Adapter)是一种连接外部系统或传输协议的端点(EndPoint),可以分为入站(inbound)和出站(outbound)。 通道适配器是单向的,入站通道适配器只支持接收消息,出站通道适配器只支持输出消息。

Spring Integration内置了如下的适配器:RabbitMQ、Feed、File、FTP/SFTP、Gemfire、HTTP、TCP/UDP、JDBC、JPA、JMS、Mail、MongoDB、Redis、RMI、Twitter、XMPP、WebServices(SOAP、REST)、WebSocket。
(2) Gateway
消息网关(Gateway)类似于Adapter,但是提供了双向的请求/返回集成方式,也分为入站(inbound)和出站(outbound)。 Spring Integration 对Adapter都提供了相应的Gateway。
(3) Service Activator
Service Activator 可调用Spring的Bean来处理消息,并将处理后的结果输出到指定的消息通道。
(4) Router
路由(Router) 可根据消息体内容(Payload Type Router)、消息头的值(Header Value Router) 以及定义好的接收表(Recipient List Router) 作为条件,来决定消息传递到的通道。
(5) Filter
过滤器(Filter) 类似于路由(Router),不同的是过滤器不决定消息路由到哪里,而是决定消息是否可以传递给消息通道。
(6) Splitter
拆分器(Splitter)将消息拆分为几个部分单独处理,拆分器处理的返回值是一个集合或者数组。
(7) Aggregator
聚合器(Aggregator)与拆分器相反,它接收一个java.util.List作为参数,将多个消息合并为一个消息。
(8) Enricher
当我们从外部获得消息后,需要增加额外的消息到已有的消息中,这时就需要使用消息增强器(Enricher)。消息增强器主要有消息体
增强器(Payload Enricher)和消息头增强器(Header Enricher)两种。
(9) Transformer
转换器(Transformer)是对获得的消息进行一定的转换处理(如数据格式转换).
(10) Bridge
使用连接桥(Bridge)可以简单的将两个消息通道连接起来。
<h2>IntegrationFlow</h2>
Spring Integration 还提供了一个 IntegrationFlow 来定义系统继承流程。

参考:
Spring Integration集成框架之Message-Channel
https://my.oschina.net/zhzhenqin/blog/86586
Spring Cloud Stream Messaging Annotations
http://blog.sisopipo.com/2017/02/21/spring-cloud-stream-messaging-annotations.html
在SpringBoot中集成MQTT
http://webfuse.cn/2017/08/17/%E5%9C%A8SpringBoot%E4%B8%AD%E9%9B%86%E6%88%90MQTT/
Spring整合MQTT
http://blog.csdn.net/u010784959/article/details/76416246
在spring web中启动mqtt
https://my.oschina.net/youway/blog/521197?p=1
MQTT Java客户端Eclipse paho实现数据的发送和接收
http://blog.csdn.net/ty497122758/article/details/77281247/
MQTT和spring的整合(生产者和消费者)
http://blog.csdn.net/zhang89xiao/article/details/51871973
http://blog.csdn.net/zhang89xiao/article/details/51871624

spring-integration-mqtt

Spring Integration Reference Manual
https://docs.spring.io/spring-integration/reference/html/index.html
MQTT Support Part V. Integration Endpoints
https://docs.spring.io/spring-integration/reference/html/mqtt.html
Eclipse Paho Java Client
https://www.eclipse.org/paho/clients/java/
http://www.eclipse.org/paho/files/javadoc/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值