前言
在之前的章节中,所有消费者和生产者均通过
@EnableBinding定义,此方式能够快速的构建生产消费关系,但仔细想想,如果我们需要根据一定的条件决策消息生产者将消息发往哪个通道,貌似当前简单粗暴的方式无法满足。如此常见的场景,springcloud必然会帮我们想到,通过
BinderAwareChannelResolver的bean实例即可实现动态通道的选择,其会伴随
@EnableBinding注解自动完成注册。
本章概要
1、BinderAwareChannelResolver的应用;
2、ExpressionEvaluatingRouter的应用;
BinderAwareChannelResolver的应用
首先来看
BinderAwareChannelResolver的直接应用,为了方便场景模拟,采用一个rest api方式触发消息的生产发送。
消费者Receiver工程改造
1、在MySink中添加如下两个动态接收通道,
dynamic1-channel与
dynamic1-channel:
package com.cloud.shf.stream.sink;
public interface MySink {
/*********************************动态通道选择示例******************************/
String DYNAMIC1_CHANNEL = "dynamic1-channel";
String DYNAMIC2_CHANNEL = "dynamic2-channel";
@Input(DYNAMIC1_CHANNEL)
SubscribableChannel dynamic1Input();
@Input(DYNAMIC2_CHANNEL)
SubscribableChannel dynamic2Input();
}
2、在SinkReceiver.class中添加对上述两个通道的监听,并打印接收内容:
/*********************************动态通道选择示