На хабе сообщений Bluemix, как я могу обмениваться сообщениями между клиентом rest и mqlight?

В соответствии с документацией https://console.ng.bluemix.net/docs/services/MessageHub/index.html должна быть возможность отправить сообщение в MessageHub через REST и получить его через клиент 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"}

1 ответ

Вы правы, что документация здесь не особенно конкретизирована. Единственная деталь в этом - в небольшом разделе, который пытается объяснить, что для взаимодействия с клиентом MQLight из какого-либо другого клиента Kafka или REST вам необходимо иметь возможность кодировать / декодировать сообщение AMQP 1.0 формат (см. раздел 3 спецификации).

Вам будет трудно добиться этого в сценариях curl, так как вам нужен доступ к библиотеке AMQP 1.0, и даже Python не идеален, поскольку в настоящее время ваш единственный реальный вариант - использовать python-qpid-proton, который является достаточно тяжелым, поскольку он оборачивается нативная библиотека proton-c и, следовательно, требует компиляции во время установки.

Например, в Java вы можете использовать комбинацию официальных Java -клиентов kafka и qpid proton-j для обеспечения кодирования + декодирования сообщений AMQP. Или, если вы должны использовать API REST, то используйте что-то вроде симуляции.

Другие вопросы по тегам