Browser Qpid质子:向两个目的地发送消息

Browser Qpid质子:向两个目的地发送消息,browser,message-queue,connect,messagebroker,qpid,Browser,Message Queue,Connect,Messagebroker,Qpid,目前,我能够将消息发送到单个队列“devQueue”。当消息到达“devQueue”时,还需要将其发送到“localQueue”。我发现这一实施具有挑战性。我试图从“class1”类调用另一个类“local_send”,这样我就可以连接到另一个目标,即“localQueue”(如下代码所示),但没有成功。是否有任何有用的质子函数,或者我可以在v_message()函数的“class1”类中使用on_connection_open()中的引用变量?在这方面的任何帮助或想法都将不胜感激 目前代码没有

目前,我能够将消息发送到单个队列“devQueue”。当消息到达“devQueue”时,还需要将其发送到“localQueue”。我发现这一实施具有挑战性。我试图从“class1”类调用另一个类“local_send”,这样我就可以连接到另一个目标,即“localQueue”(如下代码所示),但没有成功。是否有任何有用的质子函数,或者我可以在v_message()函数的“class1”类中使用on_connection_open()中的引用变量?在这方面的任何帮助或想法都将不胜感激

目前代码没有进入“local_send”类,因此消息没有被发送到“localQueue”

class class1:公共质子::消息传递\u处理程序{
std::字符串url;
std::字符串devQueue;
std::字符串localQueue;
std::向量msgVector;
本地发送snd;
std::载体msgV;
公众:
类别1(const std::string&u、const std::string&devQueue、const std::string&localQueue):
url(u)、devQueue(devQueue)、localQueue(localQueue)、snd(msgVector、localQueue){}
容器启动时无效(质子::容器和c)覆盖{
c、 连接(url);
}
连接打开时无效(质子::连接和c)覆盖{
c、 打开接收器(devQueue);
}
无效于_消息(质子::交付和交付,质子::消息和消息)覆盖{
msgV.推回(msg);
//在这里,检查消息是否具有有效的格式,并调用v_message()
}
无效v_消息(常量包和消息){
此->msgVector.push_back(msg);
//我需要将消息发送到localQueue,因此我们正在从这里运行另一个类(但这不起作用:()
本地发送snd(msgVector、localQueue);
质子::容器(snd).run();
}
可发送(质子::发送方&s)覆盖时无效{
用于(自动消息:msgVector){
s、 发送(msg);
}
}
};
//我是否需要这个类将消息发送到另一个目的地?
类本地\u发送:公共质子::消息传递\u处理程序{
std::字符串localQueue;
std::向量msgVector;
公众:
本地发送(std::vector msgVector、const std::string和localQueue):
msgVector(msgVector),localQueue(localQueue){}
连接打开时无效(质子::连接和c)覆盖{
c、 打开接收器(本地队列);
}
可发送(质子::发送方&s)覆盖时无效{
用于(自动消息:msgVector){
s、 发送(msg);
}
}
};

您需要调用open\u sender来创建发送消息的通道。您可以在一个处理程序中完成此操作。伪代码:

proton::sender snd;

on_connection_open(conn) {
    conn.open_receiver("queue1");
    snd = conn.open_sender("queue2");
}

on_message(dlv, msg) {
    // Relay message from queue1 to queue2
    snd.send(msg);
}

此代码段不在\u sendable上使用。发送在库中缓冲。如果愿意,可以像在代码中那样使用消息向量,并在\u sendable上使用(在同一个处理程序中)当有信用卡时发送。

您需要呼叫open\u sender以创建发送邮件的通道。您可以在一个处理程序中完成此操作。伪代码:

proton::sender snd;

on_connection_open(conn) {
    conn.open_receiver("queue1");
    snd = conn.open_sender("queue2");
}

on_message(dlv, msg) {
    // Relay message from queue1 to queue2
    snd.send(msg);
}

此代码段不在\u sendable上使用。发送在库中缓冲。如果愿意,可以像在代码中那样使用消息向量,并在\u sendable上使用(在同一个处理程序中)有信用卡时发送。

谢谢Justin!这非常有用,而且很有效。在重构时,我需要对消息配置有一些了解。我想不出如何通过这篇文章进行扩展,所以发布了另一篇。谢谢Justin!这非常有帮助,而且很有效。在重构时,我需要对消息配置有一些了解。Ca我不知道如何通过这篇文章扩展它,所以又发了一篇。