无法从 Bluemix Liberty 连接到 BlueMix MessageHub

Can't Connect to BlueMix MessageHub From Bluemix Liberty

我有一个连接 Bluemix Message Hub 的 liberty 应用程序。它在本地运行良好,但是当我 运行 来自 Bluemix Liberty 的 liberty 应用程序时,它永远无法运行。我正在按照 https://github.com/ibm-messaging/message-hub-samples/tree/master/kafka-java-liberty-sample 中的示例进行操作,其中您在 运行 期间在 server.xml 中更改了 username/pw。

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

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

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

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

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

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

获得的用户名和密码

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

例如a 属性 如下所示,使用真实的用户名和密码。 请注意,"; 应逐字显示。

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)