Использование C ++ для записи изображения в очередь RabbitMQ - PullRequest
0 голосов
/ 10 мая 2018

Я использую SimpleAmqpClient , который является библиотекой C ++ для использования с брокером RabbitMQ. Я могу отправить и получить строку, т. Е. "Привет, мир". Вот программа , которая делает это.

#include <stdlib.h>
#include <stdio.h>
#include <SimpleAmqpClient/SimpleAmqpClient.h>
#include <iostream>
#include "SimplePublisher.h"

using namespace AmqpClient;
using namespace std;
int main()
{
    char *szBroker = getenv("AMQP_BROKER");
    Channel::ptr_t channel;
    if (szBroker != NULL)
        channel = Channel::Create(szBroker);
    else
        channel = Channel::Create("192.168.66.1", 5672);

    string a="hello world";

   // SimplePublisher pub(channel);
    boost::shared_ptr<SimplePublisher> pub=SimplePublisher::Create(channel, "wt");
        pub->Publish(a);
}

Вызывает первую из этих функций, которая принимает строку.

void SimplePublisher::Publish(const std::string &message)
{
    BasicMessage::ptr_t outgoing_message = BasicMessage::Create();
    outgoing_message->Body(message);

    Publish(outgoing_message);
}

void SimplePublisher::Publish(const BasicMessage::ptr_t message)
{
    m_channel->BasicPublish(m_publisherExchange, "", message);
}

Я хочу записать изображение JPEG в очередь, которая не является строкой.

Может кто-нибудь прокомментировать, как я это сделаю?

1 Ответ

0 голосов
/ 10 мая 2018

У вас есть два варианта.

  1. Сериализация байтов изображения в строку Base-64

  2. Публикация изображения в виде байтового массива напрямую.

Следует отметить, что RabbitMQ лучше всего работает при работе с очень маленькими (<25 КБ) сообщениями. Если ваши изображения имеют значительный размер (например, больше этого размера), то у вас могут возникнуть проблемы с производительностью брокера, если объем ваших сообщений велик. В этом случае было бы лучше настроить альтернативный поток для больших файлов, НЕ включающий посредник сообщений. </p>

...