无法从 Bluemix Liberty 连接到 BlueMix MessageHub



我有一个连接 Bluemix Message Hub 的自由应用程序。 它在本地工作正常,但是当我从 Bluemix Liberty 运行 liberty 应用程序时,它永远不会工作。 我正在遵循 https://github.com/ibm-messaging/message-hub-samples/tree/master/kafka-java-liberty-sample 中的示例,您在运行时更改服务器中的用户名/pw .xml。

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

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

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

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

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

将包含从VCAP_SERVICES获取的用户名和密码的sasl.jaas.config属性添加到使用者和生产者的Properties

见 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)

最新更新