2016-09-20 27 views
0

根據文檔https://console.ng.bluemix.net/docs/services/MessageHub/index.html#messagehub應該可以通過REST向MessageHub提交消息並通過MQLight客戶端接收消息。但是文檔缺乏一個例子,並且有點......不透明。在bluemix消息中心上,如何在休息和mqlight客戶端之間交換消息?

所以,如果我創建MQLight話題,並有一個Python客戶端偵聽,

import json 
    import logging 
    import mqlight 
    import time 

    amqps = 'amqps://xxxxxxxxxxxxx.messagehub.services.us-south.bluemix.net:5671' 
    options = { 
     'user' : 'xxxxxxxxxxxxxxxx', 
     'password' : 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' 
    } 

    def on_message(message_type, data, delivery): 
     d = json.loads(data) 
     print str(d) 

    def on_started(err): 
     client.subscribe('test', on_message = on_message) 

    def on_stopped(err): 
     logging.info('stopped') 

    client = mqlight.Client(amqps, security_options = options, client_id = 'client', on_started=on_started) 

    while True: 
     logging.info(str(client.get_state())) 
     time.sleep(5) 

我將如何通過捲曲發佈的消息。我都試過了,其中值字符串是base64編碼,

curl -i                          \ 
      -X POST                         \ 
      -H "X-Auth-Token:${APIKEY}"                    \ 
      -H "Content-Type: application/vnd.kafka.binary.v1+json"             \ 
      --data '{"records":[{"value":"S2Fma2E="}]}'                \ 
      "https://kafka-rest-prod01.messagehub.services.us-south.bluemix.net:443/topics/MQLight/test" 

但回報,

{"error_code":404,"message":"HTTP 404 Not Found"} 

回答

1

你是正確的,這裏的文檔不是特別充實。關於這一點的唯一細節是在小節here,它試圖解釋爲了與來自其他Kafka或REST客戶端的MQLight客戶端互操作,您需要能夠對AMQP 1.0消息進行編碼/解碼格式(參見spec的第3部分)。

因爲你需要訪問AMQP 1.0庫,所以你很難在curl腳本中實現這一點,甚至Python也不是理想的,因爲目前你唯一真正的選擇是拉動python-qpid-proton,這是非常重量級的,因爲它包裝質子-c原生庫,因此需要安裝時編譯。

例如,在Java中,您可以使用官方Java kafka-clients和qpid proton-j的組合來提供AMQP消息編碼+解碼。或者如果你必須使用REST api,那麼拉入類似feign的東西。

相關問題