多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
如果没有手动配置,source 的默认 channel 选择器类型是 replicating(复制),当然这个选择器只针对 source 配置了多个 channel 的时候。前面介绍过,一个source可以向多个channel同时写数据,所以也就产生了以何种方式向多个channel写的问题(比如自带的复制选择器,会把数据完整地发送到每一个channel,而多路复用选择器 就可以通过配置来按照一定的规则进行分发,听起来很像负载均衡),channel 选择器也就应运而生。 :-: ![](https://img.kancloud.cn/98/e6/98e6fa5558ce283c7c7de0c681e2290a_832x180.png) 多跳(multi-agent flow) ![](https://img.kancloud.cn/d7/d0/d7d0f55a318a2e16384eac8f5cec35ba_885x391.png) 多路数据流(Multiplexing the flow) <br/> 下面是复制选择器、多路复用选择器的示例。 1. 复制选择器 ```shell a1.sources = r1 a1.channels = c1 c2 c3 # 选择器类型 a1.sources.r1.selector.type = replicating a1.sources.r1.channels = c1 c2 c3 a1.sources.r1.selector.optional = c3 #向 c3 发送失败将忽略 ``` 上面这个例子中,c3 配置成了可选的。向 c3 发送数据如果失败了会被忽略。c1 和 c2 没有配置成可选的,向 c1 和 c2 写数据失败会导致事务失败回滚。 2. 多路复用选择器 ```shell a1.sources = r1 a1.channels = c1 c2 c3 c4 # 选择器类型 a1.sources.r1.selector.type = multiplexing #以每个 Event 的 header 中的 state 这个属性的值作为选择 channel 的依据 a1.sources.r1.selector.header = state #如果 state=CZ,则选择 c1 这个 channel a1.sources.r1.selector.mapping.CZ = c1 #如果 state=US,则选择 c2 和 c3 这两个 channel a1.sources.r1.selector.mapping.US = c2 c3 #默认使用 c4 这个 channel,如果没有被规则匹配到,默认会发到此 channel a1.sources.r1.selector.default = c4 ```