Я хочу знать, как упростить множественное связывание с Spring Cloud Stream - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь подключиться к нескольким брокерам 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();
    }

}

Нет ли лучшего способа, чем этот?
Я думаю, что есть другой способ использовать аннотации (например, Условные или другие) или настроить библиотеку весеннего потока облака.

Любой, кто знает, пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 17 декабря 2018

Я не думаю, что профили - это лучший способ справиться с этим.

Исходя из моего понимания ваших требований, вышеизложенное можно легко обработать с различными значениями свойств или даже с помощью распознавателей свойств

  1. Вы можете просто определить свои свойства при запуске через командную строку, конфигурационный сервер и многими другими способами

  2. Вы можете определять свои свойства статически, скажем, в yamlили файл свойств, а затем используйте стандартное обозначение разрешения свойств для предоставления фактических значений

    spring.cloud.stream.someproperty=${someproperty.value}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...