2017-06-21 84 views
1

我有一个连接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。无法从Bluemix Liberty连接到BlueMix MessageHub

经过一些试验和错误,我意识到,当我在server.xml中对我的kafka用户名/ pw进行硬编码时,BluemixLiberty会连接到MsgHub。当我在示例中“热切换”kafka用户名/密码时,它不起作用,从不连接到kafka(即使重新启动服务时它不会重新连接)。我通过使用CF登录到我的服务进行检查,并且sever.xml具有正确交换的用户名/密码。

Bluemix Liberty支持此功能吗?如果没有,我该如何正确使用vcap-services,这样我就不会硬编码我的生产用户/ pw?

回答

1

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

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

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

添加到您的消费者和生产者的Properties a sasl.jaas.config属性,其中包含从VCAP_SERVICES获得的用户名和密码。

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

例如,像真实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 (我们会尽快与合并这种PR,对于现在的分支 https://github.com/edoardocomar/message-hub-samples/tree/liberty-fixed-serverxml

+0

谢谢。我会尝试sasl配置。我的server.xml是在spring自动连接期间编写的,并且在主应用程序启动之前不会使用,所以我不能“移动”server.xml以前交换,尽管我会多挖一点,看看我是否会可以找出原因。 – kyl

+0

添加用户名/密码到性能很好的 – kyl

+0

变更现在在主分支 https://github.com/ibm-messaging/message-hub-samples/tree/master/kafka-java-liberty-sample –