【发布时间】:2018-12-14 01:17:09
【问题描述】:
我正在尝试使用 Spring Cloud Stream 连接到多个 Kafka 代理。
在运行时,当我有特定的配置文件或条件时,我想避免绑定到特定的代理。
下面的代码是我开发的一个示例。
@Profile({"b","c"})
@EnableBinding(AConsumer.AChanel.class)
public class AConsumer {
private final Logger logger = LoggerFactory.getLogger(getClass());
@StreamListener(AConsumer.AChanel.INPUT)
public void subscribe(String message, @Headers Map<String, Object> headers) {
logger.info("i receive message(A) --> message : {}", message);
}
public interface AChanel {
public static final String INPUT = "a_input";
@Input(INPUT) SubscribableChannel aInput();
}
}
@Profile({"a","c"})
@EnableBinding(BConsumer.BChanel.class)
public class BConsumer {
private final Logger logger = LoggerFactory.getLogger(getClass());
@StreamListener(BConsumer.BChanel.INPUT)
public void subscribe(String message, @Headers Map<String, Object> headers) {
logger.info("i receive message(B) --> message : {}", message);
}
public interface BChanel {
public static final String INPUT = "b_input";
@Input(INPUT) SubscribableChannel bInput();
}
}
@Profile({"a","b"})
@EnableBinding(CConsumer.CChanel.class)
public class CConsumer {
private final Logger logger = LoggerFactory.getLogger(getClass());
@StreamListener(CConsumer.CChanel.INPUT)
public void subscribe(String message, @Headers Map<String, Object> headers) {
logger.info("i receive message(C) --> message : {}", message);
}
public interface CChanel {
public static final String INPUT = "c_input";
@Input(INPUT) SubscribableChannel cInput();
}
}
没有比这更好的方法吗?
我认为还有另一种方法可以使用注释(如条件或其他)或自定义弹簧云流
图书馆。
谁知道,请帮帮我。
【问题讨论】:
标签: spring spring-boot apache-kafka spring-cloud-stream