Я работаю с 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;
}
Производитель распечатывает размер 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.
Я не правильно пишу данные? Любая точка в правильном направлении высоко ценится. Спасибо!