1.direct channel是默认的channel,提供此种通道实现的关键动机在于消息通道带来的抽象与松耦合的同时,也能够支持事务特性。在配置多个接收器的时候支持负载均衡和错误转移,应用场景暂没想出。
2.当必须能够保证消息内容类型为预期类型。使用“消息过滤器”或者基于内容类型的“消息路由器”都可以满足上述需求。但是,使用“Datatype Channel”模式是一种更简单的应对方案。<int:channel id="stringOrNumberChannel" datatype="java.lang.String,java.lang.Number"/>
可以实现convertor对类型进行转化。
3.queue channel要考虑pollor的时间,因为很多时候会有惯性思维比如通常设置五秒,新的也设置五秒,但是当消息来的很频繁且很大的时候,如不能及时消费,且没有设置capacity的时候,可能会有oom的问题。
4.简单说一下message store,关键在于插入删除的时机,当channel收到message时插入,只有在整个事务成功提交后才会被从store中永久移除;反之,若事务回滚,消息并不会被丢失。
5.如果在PublishSubscribeChannel的下游消息流中定义了Resequencer或者Aggregator,那么可以为通道设置apply-sequence属性。如此将意味着通道将为发布的消息设置sequence-size与sequence-number以及“相关性的ID值”的消息头属性。比如,如果通道有5个订阅者,那么sequence-size属性将被设置为5,被发布的消息将依次具有范围1至5的sequence-number头部属性值。
6.PriorityChannel.根据header中的priority进行优先级排序,可以自定义compare规则,破坏了queue的FIFO,重要的事情先处理。
7.RendezvousChannel记录一下他是因为之前没有使用过,比较陌生。首先他类似于queue channel,前后两端是解耦的。但是不同的是可以理解为他是一个queue size=1的queue channel,是所谓的手把手交互,就是确认后端收走了这条message再接受下一个。
<int:channel id="rendezvousChannel"/>
<int:rendezvous-queue/>
</int:channel>
8.之前的文章有提到interceptor,这里补充一点可以通过设置pattern设置全局拦截器。
参考文章:
英文官方文档
https://docs.spring.io/spring-integration/docs/2.0.0.RC1/reference/html/channel.html#channel-implementations-directchannel
中文参考文档
http://m.it610.com/article/2680656.htm