tl; dr
Мой вопрос содержит некорректные зависимости, я добавил два биндера, которые неверны. Когда вы запускаете приложение Spring Cloud Stream, не знаете, что является основным. Поэтому вам нужно выбрать только один.
Так как я хочу работать с Event Hub, но не имел опыта работы с ним, но имел опыт работы с Kafka, а Event Hub имеет режим для работы по протоколу Kafka, я начал смотри в эту сторону. Все учебники от Microsoft не работают (грустно для меня). Они устарели.
Итак, я начал думать, что если он работает по протоколу Kafka, может быть, я смогу нить Event Hub как простой Kafka с некоторыми изменениями конфигурации. После поиска в Google я нашел много руководств, как это сделать.
Все, что вам нужно, это создать обычного потребителя / производителя Kafka. Я сделал это с помощью Spring Cloud Stream
@Slf4j
@EnableBinding(Sink.class)
public class KafkaSink {
@StreamListener(Sink.INPUT)
public void consumerMessage(TestMessage testMessage) {
log.info("{}", testMessage);
}
}
@Component
@EnableBinding(Source.class)
public class KafkaSource {
private final MessageChannel output;
@Autowired
public KafkaSource(MessageChannel output) {
this.output = output;
}
public void send(TestMessage testMessage) {
output.send(MessageBuilder.withPayload(testMessage).build());
}
}
А затем просто добавил правильную конфигурацию jaas в файл application. *. Вам нужно получить строку подключения для вашего концентратора событий
Мой файл yaml:
spring:
cloud:
stream:
bindings:
input:
destination: my-topic
output:
destination: my-topic
kafka:
binder:
auto-create-topics: true
brokers: ${EVENT_HUB_KAFKA_BROKER}
configuration:
sasl:
jaas:
config: ${EVENT_HUB_CONNECTION_STRING}
mechanism: PLAIN
security:
protocol: SASL_SSL
Одна важная вещь: EVENT_HUB_KAFKA_BROKER должен быть адресом концентратора событий, например blablabla.servicebus.windows.net:9093
(не забудьте порт ). Для EVENT_HUB_CONNECTION_STRING вы должны указать модуль, который будет анализировать строку подключения как пароль, и это должно быть что-то вроде org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="{your_connection_string}"\