私は 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 を出力します。
データを正しく書き込んでいませんか?正しい方向のポイントは大歓迎です。ありがとう!