Я пытаюсь подключиться к нескольким брокерам Kafka с помощью Spring Cloud Stream.
Во время выполнения я хочу избежать привязки к конкретному брокеру, когда у меня есть определенный профиль или условие.
Код нижеобразец, который я разработал.
@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();
}
}
Нет ли лучшего способа, чем этот?
Я думаю, что есть другой способ использовать аннотации (например, Условные или другие) или настроить библиотеку весеннего потока облака.
Любой, кто знает, пожалуйста, помогите мне.