я использую 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 в очередь, которая не является строкой.
Кто-нибудь может прокомментировать, как я это сделаю?
У вас есть два варианта.
Сериализация байтов изображения в Строка в кодировке Base-64
Опубликуйте изображение как байтовый массив напрямую.
Следует отметить, что RabbitMQ работает лучше всего при работе на очень маленьких (<25kB) сообщений. Если ваши изображения имеют значительный размер (например, больше этого размера), то у вас могут возникнуть проблемы с производительностью брокера, если объем ваших сообщений велик. В этом случае было бы лучше настроить альтернативный поток для больших файлов, НЕ включающих посредник сообщений.
Других решений пока нет …