c++ - 使用 C++ 将图像写入 RabbitMQ 队列

标签 c++ boost rabbitmq shared-ptr

我正在使用 SimpleAmqpClient这是一个与 RabbitMQ 代理一起使用的 C++ 库。我可以发送和接收字符串,即“hello world”。这是 program那样做。

#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. 将图像字节序列化为 Base-64 encoded string

  2. 直接将图像发布为字节数组。

应该注意的是,RabbitMQ 在处理非常小的 (<25kB) 消息时效果最佳。如果您的图像有相当大的尺寸(例如比这更大的尺寸),那么如果您的消息量很大,您可能会遇到代理的性能问题。在这种情况下,最好为不涉及消息代理的大文件设置备用流。

关于c++ - 使用 C++ 将图像写入 RabbitMQ 队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50274046/

相关文章:

c++ - rgb转yuv420算法效率

c++ - 这两段代码有何不同?

c++ - 定时发送和接收同一数据包

c++ - 我可以从 std::visit 返回 auto 吗?

c++ - 从 push_front 操作获取常规 MPL 列表

c++ - 如何在 C++ 中执行文件搜索

用于 AMQP 的类 JMS 消息选择器(ActiveMQ/RabbitMQ)

php - RabbitMQ 实现

javascript - RabbitMQ 在网站上向用户发送消息

c++文件夹仅搜索