如何为spring-cloud-starter总线kafka 1.2.0.RELEASE提供SSL配置



我使用的是Spring Boot 1.5.6.RELEASE、Spring Cloud Config 1.3.2.REASE和Spring Cloud Starter Bus(Kafka)1.2.0.RELEASE,Kafka版本为0.10.1.1。我试图将其配置为使用两个启用ssl的代理,但最终我得到了一系列重复的警告消息(每个代理一条),看起来如下:

Bootstrap broker broker1:9993 disconnected
Bootstrap broker broker2:9993 disconnected

在我的配置中,我有(这里只包括相关部分):

spring:
cloud:
stream:
kafka:
binder:
zkNodes: zkhost1:2181,zkhost2:2181
brokers: broker1:9993,broker2:9993
configuration:
security.protocol: SSL
ssl.enabled.protocols: TLSv1.1,TLSv1.2
ssl.endpoint.identification.algorithm: HTTPS

然而,当ProducerConfig和ConsumerConfig吐出它们的配置值时,它们都指示:

security.protocol = PLAINTEXT
ssl.enabled.protocols = [TLSv1.2, TLSv1.1, TLSv1]
ssl.endpoint.identification.algorithm = null

此外,我收到以下警告信息:

The configuration 'key.deserializer' was supplied but isn't a known config.
The configuration 'value.deserializer' was supplied but isn't a known config.
The configuration 'ssl' was supplied but isn't a known config.
The configuration 'security' was supplied but isn't a known config.

我将需要添加信任库、密钥库以及它们的密码和存储类型的配置,我还想知道如何在不在yaml配置中对它们进行硬编码的情况下提供这些配置。我的首选方法是用jvm属性填充这些配置属性。

知道我做错了什么吗?

在尝试了各种方法之后,这里有一个有趣的更新。如果我创建了一个用@EnableKafkaStreams注释的@Configuration类,我可以创建一个StreamsConfig,其中包含按指定配置的所有各种属性,但这会创建一个新的、独立的生产者和消费者。spring cloud bus kafka生产者和消费者仍然没有进行超出默认值的配置。

如果我遵循github的建议,将application.properties中的属性放在jar中,而不是通过spring-cloud-config进行配置,那么它就可以工作了。通过spring-cloud-config配置的相同配置属性会导致配置崩溃,因为它似乎不喜欢属性名称中的括号。不过,它报告的错误并没有直接抱怨属性键格式错误。当您只通过弹簧引导执行此配置时,它似乎工作得很好。因此,spring-boot和spring-cloud-config之间的配置解析似乎存在差异。

最新更新