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