2017-06-21 90 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 –