現在、私は単一のキュー "devQueue"にメッセージを送信できます。メッセージが「devQueue」に届くと、それは「localQueue」にも送られる必要があります。私はこの実装が挑戦的であると感じています。私は別のクラス "local_send"を "class1"クラスから呼び出そうとしましたので、 "localQueue"(下のコードに示すように)の他の行き先に接続できますが、運がありません。便利なプロトン関数はありますか?また、v_message()関数内の "class1"クラス内のon_connection_open()の参照変数を使用できますか?この方向の助けやアイデアは非常に高く評価されます。Qpid Proton:2つの宛先にメッセージを送信
現在、コードは「local_send」クラスには入っていないため、メッセージは「localQueue」に送信されません。
class class1 : public proton::messaging_handler {
std::string url;
std::string devQueue;
std::string localQueue;
std::vector<proton::message> msgVector;
local_send snd;
std::vector<proton::message> msgV;
public:
class1(const std::string& u, const std::string& devQueue, const std::string& localQueue) :
url(u), devQueue(devQueue), localQueue(localQueue), snd(msgVector, localQueue) {}
void on_container_start(proton::container& c) override {
c.connect(url);
}
void on_connection_open(proton::connection& c) override {
c.open_receiver(devQueue);
}
void on_message(proton::delivery &d, proton::message &msg) override {
msgV.push_back(msg);
// Here, the messages are checked if they have a valid format or not and v_message() is called
}
void v_message(const pack& msg){
this->msgVector.push_back(msg);
//I need to send the message to localQueue and hence we are running another class from here (but that is not working :()
local_send snd(msgVector, localQueue);
proton::container(snd).run();
}
void on_sendable(proton::sender &s) override {
for(auto msg: msgVector){
s.send(msg);
}
}
};
// Do I even need this class to send message to another destination?
class local_send : public proton::messaging_handler {
std::string localQueue;
std::vector<proton::message> msgVector;
public:
local_send(std::vector<proton::message> msgVector, const std::string& localQueue) :
msgVector(msgVector), localQueue(localQueue) {}
void on_connection_open(proton::connection& c) override {
c.open_receiver(localQueue);
}
void on_sendable(proton::sender &s) override {
for(auto msg: msgVector){
s.send(msg);
}
}
};
ありがとうございました!これは非常に役に立ち、効果的でした。リファクタリングの際には、メッセージの構成についていくつかの洞察が必要です。この投稿をどのように拡張するのか分かりませんので、別の記事を投稿してください。 – Mooni