【问题标题】:On bluemix message hub, how do I exchange messages between a rest and mqlight client?在 bluemix 消息中心上,如何在 rest 和 mqlight 客户端之间交换消息?
【发布时间】:2016-09-20 22:35:21
【问题描述】:

根据文档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"}

【问题讨论】:

    标签: python rest ibm-cloud message-hub


    【解决方案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 之类的内容。

    【讨论】:

      猜你喜欢
      • 2014-12-22
      • 2023-01-07
      • 2020-12-18
      • 2012-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      相关资源
      最近更新 更多