我有一个使用Spring Boot的应用程序,它与Kafka进行通信。
我通过注入环境变量来配置此应用程序在生产中的运行。
对于Kafka,我可以通过环境变量配置大多数内容 - 引导服务器、SSL信任库位置、SSL信任库密码、组ID、主题等:
SPRING_KAFKA_SSL_TRUSTSTORE-LOCATION: "file:/opt/app/jks/totally_real_file.jks"
SPRING_KAFKA_SSL_TRUSTSTORE-PASSWORD: "hunter2"
因为我可以使用环境变量配置SSL密钥库和密码,所以我认为我可以配置SSL协议和安全协议。例如:
SPRING_KAFKA_PROPERTIES_SECURITY_PROTOCOL: "SSL"
SPRING_KAFKA_PROPERTIES_SSL_PROTOCOL: "SSL"
但是,我的假设是错误的,因为当我设置它时,会出现一条消息:
The configuration 'SECURITY_PROTOCOL' was supplied but isn't a known config
The configuration 'SSL_PROTOCOL' was supplied but isn't a known config
更多的消息出现了!
Bootstrap broker one:9093 disconnected
Bootstrap broker two:9093 disconnected
Bootstrap broker more_than_two:9093 disconnected
这让我感到悲伤。我在互联网上搜索,找到了以下链接: Spring Kafka SSL在Spring Boot应用程序.yml中的设置 这并没有帮助太多,我想通过环境变量进行配置...
我找到了github问题链接(这变得更糟了): https://github.com/spring-projects/spring-integration-kafka/issues/157 这提供了部分线索。
yml文件:
spring.kafka.properties.security.protocol: "SSL"
应该可以工作,但实际上并没有
yml 文件内容:
spring:
kafka:
properties:
security.protocol: "SSL"
ssl.protocol: "SSL"
确实可以生效!但是无法使用环境变量来表示。
...properties
属性(全局、管理员、消费者、生产者)进行设置。请查看我的答案更新,了解如何使用环境变量。 - Gary Russell