当前位置: 首页 > 知识库问答 >
问题:

使用连接字符串通过Spring Boot连接到Azure EventHub(类似Kafka)

颛孙霖
2023-03-14

我需要使用启用的kafka和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>

我找到了一个教程,我需要从我的本地机器使用az login登录到azure并创建auth文件,但是我被提供了应该使用的连接字符串,所以有没有任何方法可以使用如下命名空间指定仅连接字符串:

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

因为现在正在抱怨缺少资源组。

我应该如何连接到EventHub?

共有1个答案

酆出野
2023-03-14

tl;博士

我的问题包含不正确的依赖项,我添加了两个绑定,这是不正确的。当您启动应用程序spring cloud stream时,不知道什么是主要的。所以你只需要选择一个。

因此,由于我想使用Event Hub,但之前没有使用它的经验,但有使用Kafka的经验,并且Event Hub的工作模式符合Kafka协议,所以我开始这样看。微软的所有教程都不起作用(我很难过)。它们已经过时了。

所以,我开始想如果它是通过Kafka协议工作的,也许我可以将事件中心作为简单的Kafka进行一些配置更改。谷歌搜索后,我找到了很多如何做到这一点的教程。

您只需要创建常规的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配置添加到应用程序中。*文件。您需要获取事件中心的连接字符串

我的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必需的用户名="$ConnectionString"密码="{your_connection_string}"\

 类似资料:
  • 我正在尝试加入一个名单: 这不编译说: 然而,这并不抱怨: 有人能给我解释一下原因吗?对于和之间的区别,我也很感激一些说教性的解释,因为我认为我没有理解对。

  • 本文向大家介绍通过concat()方法进行字符串连接。,包括了通过concat()方法进行字符串连接。的使用技巧和注意事项,需要的朋友参考一下 您可以使用String类的方法来连接两个字符串。此类将指定的字符串连接到该字符串的末尾。 示例 输出结果

  • 问题内容: 我有以下代码 输出为。 Java如何完成字符串连接的技巧? 问题答案: 因为Java将表达式转换为类似 实际上,我认为它可能使用s,因此: 解决更高效 这使用“ 字符串”构建器上的方法(针对每种类型),这些方法可以正确处理

  • 本文章将介绍Thymeleaf标准表达式语法中的概念。 学习如何在Thymeleaf模板中显示对象(Bean)的属性值。 已经将类的bean已经设置为名称为的上下文模型。 为这些和属性添加一些格式,学习使用字符串相连接输出。 最后,修改模板以获得一个合理的静态原型(例如,通过一些原型数据替换并显示结果)。 如果要上机实践,请参考:Thymeleaf+SpringMVC5示例项目。这里不再重复创建项

  • 我正在读一本书叫做。NET Gotchas(非常值得一读),它说明了String和StringBuilder之间的性能差异,它提出了一个我觉得不能没有答案的问题!虽然我不知道这两个类的内部结构(不看这些类的反射版本),但我想知道;因为运算符在。NET是可重载的,为什么微软没有实现String类来在内部使用StringBuilder并重载连接运算符来简单调用。在StringBuilder中追加()?

  • Parameter Position Type Required cat Description 1 string No empty This value to catentate to the given variable. 将cat里的值连接到给定的变量后面. This value is concatenated to the given variable. 将cat里的值连接到给定的变量后面