1

我有一个连接 Bluemix Message Hub 的自由应用程序。它在本地运行良好,但是当我从 Bluemix Liberty 运行 liberty 应用程序时它永远无法运行。我正在关注https://github.com/ibm-messaging/message-hub-samples/tree/master/kafka-java-liberty-sample中的示例,您在运行时更改 server.xml 中的用户名/密码。

经过反复试验,我意识到当我在 server.xml 中硬编码我的 kafka 用户名/密码时,BluemixLiberty 可以正常连接到 MsgHub。当我像示例中那样“热交换”kafka 用户名/密码时,它不起作用并且永远不会连接到 kafka(即使我重新启动服务它也不会重新连接)。我已经通过使用 CF 登录到我的服务进行了检查,并且 sever.xml 确实正确交换了用户名/密码。

Bluemix Liberty 是否支持此功能?如果不是,我应该如何正确使用 vcap-services,这样我就不会对我的生产用户/密码进行硬编码?

4

1 回答 1

1

我刚刚将 MessageHub 的 kafka-java-liberty-sample 重新部署到 Bluemix 并检查它工作正常。您自己的应用程序可能无法运行的一个原因可能是它server.xml在凭据替换发生之前读取 's。在示例中,文本替换发生在设置任何 JAAS 配置之前。

但是,您可以采用另一种更好的方法。使用 Kafka 的 0.10.2 客户端,您不必使用全局 JAAS 配置(jaas.conf普通 Java 应用程序中的文件或<jaasLoginContextEntry>Liberty 中的文件server.xml)。

相反,您可以从中删除<jaasLoginContextEntry></jaasLoginModule>部分,server.xml并避免在那里进行任何替换。

添加到您的消费者和生产者的Properties属性sasl.jaas.config,其中包含从VCAP_SERVICES.

http://kafka.apache.org/documentation/#security_sasl_plain_clientconfig

例如具有真实用户名和密码的如下属性。请注意,"并且;预计将逐字出现。

sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="USERNAME" password="PASSWORD";

请参阅https://github.com/ibm-messaging/message-hub-samples/pull/17 (我们将很快合并此 PR,目前分支为 https://github.com/edoardocomar/message-hub-samples /tree/liberty-fixed-serverxml )

于 2017-06-22T01:14:54.423 回答