我有一个连接Bluemix Message Hub的自由应用程序。它在本地工作正常,但是当我从Bluemix Liberty运行自由应用程序时它永远不会工作。我正在关注https://github.com/ibm-messaging/message-hub-samples/tree/master/kafka-java-liberty-sample中的示例,您可以在运行时更改server.xml中的username / pw。
经过一些试验和错误后,我意识到当我在server.xml中对我的kafka用户名/ pw进行硬编码时,BluemixLiberty会很好地连接到MsgHub。当我在示例中“热切换”kafka用户名/ pw时,它不起作用并且从不连接到kafka(即使我重新启动它不重新连接服务)。我已经通过使用CF登录我的服务进行检查,并且sever.xml确实正确地交换了用户名/ pw。
Bluemix Liberty是否支持此功能?如果没有,我怎么能正确使用vcap-services所以我不对我的生产用户/ pw进行硬编码?
答案 0 :(得分:1)
我刚刚将MessageHub的kafka-java-liberty-sample重新部署到Bluemix并检查它是否正常工作。
您自己的应用程序可能无法正常工作的一个原因可能是在凭据替换发生之前读取server.xml
。在示例中,文本替换发生在设置任何JAAS配置之前。
但是,您可以采用另一种更好的方法。
使用Kafka的0.10.2客户端,您不必使用全局JAAS配置(普通Java应用程序中的jaas.conf
文件或Liberty <jaasLoginContextEntry>
中的server.xml
。
您可以从<jaasLoginContextEntry>
中移除</jaasLoginModule>
和server.xml
部分,并避免在那里进行任何替换。
添加到您的消费者和制作人的Properties
sasl.jaas.config
属性,其中包含从VCAP_SERVICES
获取的用户名和密码。
请参阅http://kafka.apache.org/documentation/#security_sasl_plain_clientconfig
e.g。具有真实USERNAME和PASSWORD的以下属性。
请注意,"
和;
应该是逐字逐句的。
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 (我们将很快合并这个公关,现在分支是 https://github.com/edoardocomar/message-hub-samples/tree/liberty-fixed-serverxml)