KafkaProducer
,KafkaConsumer
或AdminClient
需要一些配置才能起作用。例如,如果我们不设置bootstrap.servers
,则它将不知道连接位置。
一开始,我使用硬编码的字符串作为键,然后过渡到ProducerConfig
,ConsumerConfig
或AdminClientConfig
中定义的常量,以便:
config.put("bootstrap.servers", "localhost:9092")
蜜饯:
config.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092")
这似乎是一个好习惯,因为在编译时会发现错误的密钥。但是,当我想使用不太常见的设置时,需要在各种类之间切换:
config.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092")
config.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, SecurityProtocol.SSL.name)
config.put(SslConfigs.SSL_KEYSTORE_TYPE_CONFIG, "PKCS12")
SECURITY_PROTOCOL_CONFIG
在ProducerConfig
中不存在,因此我在定义的地方使用了CommonClientConfigs
,但可能的值在SecurityProtocol
枚举中。与SSL相关的设置仅在SslConfigs
中。
它看起来不太干净。也许有更好的方法吗?还是我应该坚持弦乐?
答案 0 :(得分:2)
说实话,这种分组对我来说很有意义。
它尝试将生产者,消费者和他们共同的东西的配置参数分组
关于SslConfigs
,它提供了所有与SSL相关的配置参数。
安全协议规范是生产者和消费者的通用参数,不仅与SSL有关,甚至可能是PLAINTEXT,因此...“无安全性”。
回到您的特定问题,我总是喜欢使用这些声明而不是硬编码的字符串。
如果其中之一将来会改变其价值,则无需更改客户代码。