Подключитесь к Azure EventHub (как Kafka) с помощью Spring Boot, используя строку подключения - PullRequest
2 голосов
/ 03 августа 2020

Мне нужно подключиться к концентратору событий с включенной кафкой с помощью Spring Boot, и у меня есть строка подключения и пространство имен, где я должен подключиться.

Я использую такие зависимости

 <dependency>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>spring-cloud-azure-eventhubs-stream-binder</artifactId>
        <version>1.2.7</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-stream-binder-kafka</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-stream</artifactId>
    </dependency>

Я нашел учебник, в котором мне нужно войти в azure с моего локального компьютера с помощью az login и создать файл аутентификации, НО мне была предоставлена ​​строка подключения, которую я должен использовать, поэтому есть ли способ указать ТОЛЬКО строку подключения с пространством имен вот так:

spring.cloud.azure.eventhub.connection-string
spring.cloud.azure.eventhub.namespace

Потому что теперь он жалуется на отсутствие группы ресурсов.

Как мне подключиться к EventHub?

1 Ответ

0 голосов
/ 09 августа 2020

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}"\

...