qpid-broker服務器採用Java語言版本6.1.4
相關資料
http://qpid.apache.org/documentation.html
問題1)
發送到qpid服務器上的消息,如果沒有被其他的客戶端消費是否一直保存在內存中,
可能導致服務器內存耗盡,服務器崩潰,因爲服務器的內存一開始就是設置爲512MB
問題2)
發送到qpid服務器上的消息,如果由於超時,客戶端斷開連接,是否也會出現上述類似的問題
qpid-cpp項目編譯參考
http://www.it165.net/admin/html/201406/3341.html
由於複雜以及時間問題,並沒有在短時間內編譯出來
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;
}
}