Qpid第五課 消息總線使用經驗

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;

}

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章