您好,登錄后才能下訂單哦!
qpid-broker服務器采用Java語言版本6.1.4
相關資料
http://qpid.apache.org/documentation.html
問題1)
發送到qpid服務器上的消息,如果沒有被其他的客戶端消費是否一直保存在內存中,
可能導致服務器內存耗盡,服務器崩潰,因為服務器的內存一開始就是設置為512MB
解決方案: 指定消息的超時時間,如果超時,就刪除
問題2)
發送到qpid服務器上的消息,如果由于超時,客戶端斷開連接,是否也會出現上述類似的問題
qpid C++編程例子
http://qpid.apache.org/releases/qpid-cpp-1.36.0/messaging-api/cpp/examples/client.cpp.html
下載版本qpid-cpp-1.35.0
詳細的編譯參考可以在源碼中找到文件INSTALL-WINDOWS.txt
代碼
int HandleQPID()
{
std::string connectionOptions = "";
Connection connection("192.168.1.12:7070", connectionOptions);
connection.setOption("username", "admin");
connection.setOption("password", "admin");
//true的情況下,嘗試重連會導致后續一直的阻塞
connection.setOption("reconnect", false);
try
{
connection.open();
Session session = connection.createSession();
Sender sender = session.createSender(info.strMessageAddress);
Message request;
request.setContent(info.strSendContext);
session.sync();
Address responseQueue("#response-queue; {create:always, delete:always}");
request.setReplyTo(responseQueue);
sender.send(request);
Receiver receiver = session.createReceiver(responseQueue);
try
{
Message response;
//如果不指定Duration,如果服務器接收到的報文一直沒有返回,在這里會一直阻塞!!
if (receiver.fetch(response, Duration(300)))
{
info.strRecvContext = response.getContent();
std::cout << "info" << std::endl;
std::cout << info.strRecvContext << std::endl;
}
session.acknowledge();
}
catch (const std::exception& error)
{
std::cout << "receiver.fetch exception:" << error.what() << std::endl;
session.acknowledge();
session.close();
connection.close();
return -1;
}
session.close();
connection.close();
return 0;
}
catch (const std::exception& error)
{
//std::cout << "E:" << error.what() << std::endl;
info.strRecvContext = "";
connection.close();
return -1;
}
}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。