【问题标题】:Activemq-cpp BytesMessageActivemq-cpp BytesMessage
【发布时间】:2011-07-10 16:12:36
【问题描述】:

我正在使用 activemq-cpp,并且我正在尝试使用 BytesMessage 发送二进制数据。我有一个生产者和一个消费者设置来发送和接收消息。连接和会话工作正常,因为我能够发布到主题并允许消费者使用 TextMessage 获取消息。验证连接性后,我将 TextMessage 实现更改为 BytesMessage。我现在遇到的问题是对 BytesMessages 进行转码并在收到消息后从消息中取出数据。

在我的制作人中,我有:

    void producer() {
        try {
                //....setup code

                //temporary vector
                vector<unsigned char> vec;
                unsigned char temp1 = 'a';
                vec.push_back(temp1);
                vec.push_back(temp1);
                vec.push_back(temp1);

                BytesMessage * message = session->createBytesMessage();
                message->writeBytes(vec);
                cout << "SIZE IS: " << vec.size() << endl;
                producer->send( message );

                delete message;

            } catch (CMSException& e) {
                e.printStackTrace();
            }

} 

在我的消费者中,我有:

void begin(){
    // setup code to get session, etc.

    shared_ptr<BytesMessage> bytemessage =
            boost::dynamic_pointer_cast<BytesMessage>(message);

    vector<unsigned char> temp;
    bytemessage->readBytes(temp);

    cout << "SIZE IS: " << temp.size() << endl;
}

Producer 打印出的大小为 3,这是正确的。但是消费者打印出一个大小为0,表示它没有读入之前正确写入的消息。这让我问,我做错了什么?

我尝试在本地读写它,但仍然无法这样做:

    void producer() {
        try {
                //....setup code

                //temporary vector
                vector<unsigned char> vec;
                unsigned char temp1 = 'a';
                vec.push_back(temp1);
                vec.push_back(temp1);
                vec.push_back(temp1);

                BytesMessage * message = session->createBytesMessage();
                message->writeBytes(vec);
                cout << "SIZE IS: " << vec.size() << endl;

                message->reset();

                vector<unsigned char> temp2;
                message->readBytes(temp2);

                cout << "SIZE IS2: " << temp2.size() << endl;

                delete message;

            } catch (CMSException& e) {
                e.printStackTrace();
            }

} 

写入后的 cout 打印出 3,但读取后的 cout 仍然打印出 0。

我没有正确写入数据吗?非常感谢正确方向的任何一点。谢谢!

【问题讨论】:

    标签: c++ activemq activemq-cpp


    【解决方案1】:

    您是否阅读过 cms::BytesMessage 的 API 文档,其中总结得相当好。基本上,您需要在要填充的向量中分配空间量。由于您的向量没有调整大小,因此不会返回任何内容,您可以使用 BytesMessage 的 getBodyLength 方法创建向量。

    API 文档位于 here

    -Tim www.fusesource.com

    【讨论】:

      猜你喜欢
      • 2015-10-12
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 2014-12-08
      • 1970-01-01
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      相关资源
      最近更新 更多