gpt4 book ai didi

c++ - Activemq-cpp 字节消息

转载 作者:太空宇宙 更新时间:2023-11-04 12:20:47 25 4
gpt4 key购买 nike

我正在使用 activemq-cpp 并尝试使用 BytesMessage 发送二进制数据。我设置了一个生产者和一个消费者来发送和接收消息。连接和 session 工作正常,因为我能够发布到主题并允许消费者使用 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。

我是否没有正确写入数据?非常感谢任何朝着正确方向前进的观点。谢谢!

最佳答案

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

API 文档位于 here .

-Tim www.fusesource.com

关于c++ - Activemq-cpp 字节消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5225480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com