Utilisation de C ++ pour écrire une image dans une queue RabbitMQ

J’utilise SimpleAmqpClient, une bibliothèque C ++ à utiliser avec un courtier RabbitMQ. Je peux envoyer et recevoir des chaînes, c’est-à-dire “hello world”. Voici le programme qui fait ça.

#include  #include  #include  #include  #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); ssortingng a="hello world"; // SimplePublisher pub(channel); boost::shared_ptr pub=SimplePublisher::Create(channel, "wt"); pub->Publish(a); } 

Il appelle la première de ces fonctions qui prend une chaîne.

 void SimplePublisher::Publish(const std::ssortingng &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); } 

Je veux écrire une image JPEG dans la queue qui n’est pas une chaîne.

Quelqu’un pourrait-il me dire comment je ferais cela?

Vous avez deux options.

  1. Sérialiser les octets de l’image sur une chaîne codée en Base 64

  2. Publiez l’image directement sous forme de tableau d’octets.

Il convient de noter que RabbitMQ fonctionne mieux lorsqu’il fonctionne avec des messages très petits (<25 Ko). Si vos images ont une taille considérable (par exemple, une taille supérieure à celle-ci), vous pouvez avoir des problèmes de performances avec le courtier si votre volume de messages est important. Dans ce cas, il serait préférable de configurer un autre flux pour les fichiers volumineux NON impliquant le courtier de messages.