Spring Integration学习笔记二
三、Message Channel详述
message channel用来将多个消息端点(message endpoint)连接在一起,message channel可以保障消息可以安全的在多个消息端点(message endpoint)之间进行收发。为了message channel可以更容易的和message endpoint进行交互,每个message channel都拥有一个唯一的名称(标识),所以每个message channel都可以看作是一个逻辑上的地址。不同类型的message channel对消息的处理会表现出不同处理方式,以下是几种主要类型的message channel的介绍:
1、Point-to-Point Channel(点对点类型的消息通道)
Point-to-Point Channel会保证在任何时候,发送者发送的同一个消息都只有一个接收者。Spring Integration 提供了几种点对点类型通道的实现QueueChannel,PriorityChannel,RendezvousChannel,DirectChannel,ExecutorChannel,and NullChannel。
2、Publish-Subscribe Channel(订阅发布类型通道)
发布订阅通道允许生产者和消费者之间是一对多的关系。所以多个消费这可以接收同一个消息;当所有的订阅了该消息的消费者都消费了该消息后消息会被标记为已接受并且从通道中删除。Spring Integration 提供了PublishSubscribeChannel类型来实现此种通道。
3、Data-Typed Channel(这个比较抽象,我自己理解为 “类型依赖通道”)
为了能够正确的处理消息,消息的接收者必须确切的知道所要处理的消息数据的数据类型(payload的数据类型);例如:某个消息发送者可以发送携带A类型数据消息, 也可以发送携带B类型数据的消息,并且会把这两种类型的消息发送到同一个message channel,此时消息的发送者可以通过 在消息头或者消息的某个部分设置一个指定格式的标识来判断message channel中的消息所携带的到底是A类型还是B类型的数据;但是,还有一种情况就是,有两个message channel,一个只能接受携带A类型数据的消息,另一个只能接受携带B类型数据的消息,那么此时接收者就无需通过上面的方式进行判断了。这种只能接受单一类型数据的message channel被称为是Data-Typed Channel。Spring Integration 通过类似下面的配置来指定message channel是否可以处理多种消息负载类型,例如:
<channel id="messageChannel" /> 配置,
指定了message channel可以接受任何数据类型,而<channel id="queueChannel" datatype="a.A" />配置,指定消息通道只能接受唯一的一种类型a.A。
4、Invalid Message Channel (无效消息通道)
当应用从Message Channel接受一条消息时候,如果该消息的数据没有通过认证或者这个Message Channel无法支持这条数据的消息类型,应用程序将会拒绝处理该条消息,该条消息将会被路由到Invalid Message Channel,以便其他处理程序或者应用对其进行更进一步的处理。在Spring Integration中通过filter实现该验证。
5、Dead Letter Channel(忽略消息通道,或者理解无死消息通道)
如果应用程序使用所有可以使用的方式都无法将一条消息放入Message Channel,该条消息将会被发送到Dead Letter Channel,以便其他的处理程序或者其他系统中能够对该条消息进行监听的消息通道进行处理。
6、Channel Adapter(通道适配)
Channel Adapter允许应用程序连接到一个消息系统。大部分的应用程序最初设计的时候都没有设计成可以同消息系统进行通讯的应用,通过使用一个通用的接口或者应用程序编程接口(Channel Adapter),应用程序可以很容易的与不同的消息系统实现进行集成。
7、Messaging Bridge(消息桥接)
Messaging Bridge是简单的连接两个消息通道或者消息适配器。例如:开发者或许会希望能够将一个支持池化的通道连接到一个订阅发布通道上,以便订阅端点可以不去考虑任何池化的配置就可以实现池化能力。这种情况可以用消息桥接来实现。
8、Message Bus(消息总线)
在企业集成系统中,将通用数据模型,通用命令集,通过一组共享接口允许不同系统之间进行通讯的可消息化基础架构 组合在一起就称为Message Bus。在 Spring Integration 中可以通过使用Adapter和transformer,Message Channel可以连接和创建一个允许在不同系统间进行通讯的消息总线。
9、Guaranteed Delivery(固化消息或者理解为存储消息)
直到被消息系统发送前,消息都是被存储在内存中的,如果消息系统当机所有的消息将会丢失,为了保证消息的传送,消息系统可以使用某种数据存储固化消息。默认情况下 Spring Integration通道也是将消息存储在内存中,Spring Integration2.0以后,消息通道可以使用JMS broker来备份消息。换句话说消息是被保存在应用内存中的一个JMS broker实例中的。消息通道使用接口策略根据不同的需求对消息固化进行定制。可以通过实现MessageStore接口委托任何类型的可用存储设备来固化消息,如果需要更多的固化控制甚至可以通过实现Message Channel 来进行设计。