根据文档https://console.ng.bluemix.net/docs/services/MessageHub/index.html#messagehub,应该可以通过REST向MessageHub提交消息,并通过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)
我将如何通过curl发布消息。我试过,值字符串是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"}
答案 0 :(得分:1)
你说这里的文件并没有特别充实。关于此的唯一细节是在小部分here中试图解释为了与来自其他Kafka或REST客户端的MQLight客户端进行互操作,您需要能够编码/解码AMQP 1.0消息格式(参见spec的第3节)。
你很难在curl脚本中实现这一点,因为你需要访问AMQP 1.0库,甚至Python也不理想,因为目前你唯一真正的选择是引入python-qpid-proton这是非常重量级的因为它包装了proton-c本机库,因此需要安装时编译。
例如,在Java中,您可以使用官方Java kafka-clients和qpid proton-j的组合来提供AMQP消息编码+解码。或者,如果您必须使用REST api,那么请提取feign之类的内容。