亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

AMQP-cpp 開發

2019-11-08 03:22:50
字體:
來源:轉載
供稿:網友

linux開發:從官網下載amqp-cpp(https://github.com/CopernicaMarketingSoftware/AMQP-CPP)這個庫,這個庫是linux 下的。里面包含了linux下的tcp通信(不兼容widows),適合linux開發。

windows開發:由于官網沒有提供可以直接在windows下使用的amqp-cpp,所以需要將官網的linux下的庫經過修改,剝離了tcp通信部分,只留下了AMQP協議框架部分(https://git.oschina.net/Ailsc/amqp-cpp.git)。所以開發的話需要自己加入tcp(iocp:https://git.oschina.net/Ailsc/jeflib.git)通信部分配合AMQP-cpp協議框架,來共同開發AMQP。amqp-cpp.git內部有完整的Demo。

AMQP開發之前需要了解AMQP協議,可以參考前面幾章對vhost,exchange,que的參數做一個基本了解。然后配合AMQP-cpp進行軟件開發。

開發流程: 1.實現自己的AMQP::ConnectionHandler,ConnectionHandler類似于一個中間組件,將AMQP請求指令轉化為數據流,然后通過Tcp將數據流發送出去。

class CTcpConnectionHandle : public AMQP::ConnectionHandler{public: CTcpConnectionHandle(CTcpLink *plink); virtual ~CTcpConnectionHandle();public: ///> 當AMQP發送數據的時候觸發onData virtual void onData(AMQP::Connection *connection, const char *buffer, size_t size); ///> 當AMQP協議準備好(已經登錄成功)觸發 virtual void onConnected(AMQP::Connection *connection); ///> 這個需要在tcp 斷開的時候手動調用一下 virtual void onClosed(AMQP::Connection *connection); ///> 當發生錯誤的時候,該連接不可再用需要重新建立連接 virtual void onError(AMQP::Connection *connection, const char *message);PRivate: CTcpLink *m_plink;//和當前連接關聯};

2.實現TcpLink進行數據流的收發操作,以及數據解析。

class CTcpLink :public jeflib::iocp::ILinkContext{ friend class CTcpConnectionHandle;public: CTcpLink(); ~CTcpLink();public: ///> set usr psw vhost void setAMQP(std::string strusr, std::string strpsw, std::string strvhost); ///> block bool IsReady(); virtual void on_close();//on connection close,主動斷開不會收到通知 ///> for tcp svr call back virtual void on_accepted(jeflib::iocp::NETHANDLE nethandle, const char *szip, const unsigned short sport){}; ///> tcp recv data virtual void on_recv(const char *pdata, int ndatasize); ///> client connect ok virtual void on_connect_ok(jeflib::iocp::NETHANDLE nethandle); ///> client connect error virtual void on_connect_err(jeflib::iocp::NETHANDLE nethandle, bool bactive/*是否為主本端動關閉*/); ///> for iocp send data call back to resend virtual void on_send_ok(const char *pdata, int ndatasize){} virtual void on_send_err(const char *pdata, int ndatasize){} virtual CTcpLink* new_context(){ return new CTcpLink; } bool send(const char *data, int size); void parse(); Operator AMQP::Connection&(){ return *m_pConnect;}protected: std::promise<bool> m_bready;//是否準備好 bool m_blink; mutable std::mutex m_lock; std::vector<char> m_recv_buff;//數據接收緩沖區 AMQP::Connection *m_pConnect;//AMQP connect CTcpConnectionHandle *m_phandler; bool m_bpares;private://AMQP 登錄信息 std::string m_strusr; std::string m_strpsw; std::string m_strvhost;};

3.AMQP::Connection 這個是將網絡來的數據解析為AMQP協議,并且將數據行為反應到對應的回調函數之中。

void CTcpLink::parse(){ if (m_pConnect == NULL) return; uint64_t use = 0; ///> 不阻塞線程,parse一次只能一個線程調用,不能多個線程 std::unique_lock<std::mutex> guard(m_lock, std::try_to_lock); if (!guard.owns_lock()) return; if (m_bpares) return; m_bpares = true; size_t size = m_recv_buff.size(); while (size - use >= m_pConnect->expected()) { std::vector<char> buff(m_recv_buff.begin() + use, m_recv_buff.begin() + use + m_pConnect->expected()); ///> 解析期間打開鎖,允許接收數據 guard.unlock(); use += m_pConnect->parse(buff.data(), buff.size()); guard.lock(); } m_recv_buff.erase(m_recv_buff.begin(), m_recv_buff.begin() + use); m_bpares = false;}

4.連接Rabbit服務器,然后進行AMQP的通信。通信流程

Y-操作成功 連接服務器-》(Y)創建通道=》(Y)啟用ACK=》(Y)聲明exchange=》(Y)聲明隊列=》(Y)bind 隊列=》(Y)開始消費隊列,publish隊列

異常處理: tcp連接異常:可以采取重連或者關閉連接。 rabbit登錄異常:斷開Tcp連接。 通道異常:關閉當前通道,然后重啟一個通道,復制該異常通道的業務。

if(channel ready){ if(declare que) { channel->bind current que; channel->declare next que; } else//聲明隊列失敗 { 從需要聲明的隊列中移除當前錯誤的隊列,因此即使再次嘗試聲明該隊列還是會異常,所以拋棄該隊列。 channel->erase(que); 獲取當前所有需要聲明的隊列 aryque = channel->getqueary(); 重啟通道,并且將需要聲明的隊列讓新通道去做 new channel(aryque ); }}

具體AMQP實現請參照上述Demo。

注意事項: 1.隊列的Auto delete 屬性,只有已經發生過consumer操作的時候才會生效。 2.只有觸發AMQP::ConnectionHandler::onConnected才能表明AMQP協議準備完成,包括連接和登錄準備完畢,才能進行AMQP操作。 3.AMQP的通道不是線程安全的,在進行通道操作的時候需要加鎖?;蛘咭粋€線程操作一個通道。 4.AMQP同一個通道的指令處理順序需要保證序列性,因為一個請求或者指令可能存在幾個通信包。例如:publis存在三次send才完成一次publish指令。否則可能導致指令交匯,導致異常。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美大学生性色视频| 亚洲欧美激情精品一区二区| 亚洲欧美激情视频| 亚洲国产欧美一区二区三区久久| 欧美激情一区二区三区在线视频观看| 日韩不卡在线观看| 精品久久久香蕉免费精品视频| 3344国产精品免费看| 91久久国产精品| 欧美激情日韩图片| 亚洲午夜精品视频| 日韩成人av网址| 欧美日韩亚洲一区二区| 亚洲国产欧美一区二区三区久久| 精品无人区太爽高潮在线播放| 亚洲香蕉成视频在线观看| 欧美成人h版在线观看| 亚洲精品欧美日韩专区| 亚洲最大成人免费视频| 国产成人av网| 97国产精品人人爽人人做| 菠萝蜜影院一区二区免费| 欧美精品18videos性欧美| 最近2019年好看中文字幕视频| 日本成人精品在线| 俺也去精品视频在线观看| 这里只有精品丝袜| 亚洲国产成人爱av在线播放| 日韩黄色高清视频| 欧美丰满少妇xxxx| 在线观看不卡av| 日韩人在线观看| 国产精品99免视看9| 欧美日韩亚洲国产一区| 亚洲欧美国产精品va在线观看| 欧美激情中文网| 久久精品99久久香蕉国产色戒| 精品国产区一区二区三区在线观看| 亚洲人线精品午夜| 色偷偷噜噜噜亚洲男人的天堂| 欧美激情网站在线观看| 国产精品亚发布| 久久久精品久久久久| 狠狠做深爱婷婷久久综合一区| 日韩美女视频免费看| 91精品国产91久久久久久不卡| 国产一区二区激情| 久久久免费观看视频| 欧美午夜影院在线视频| 九九热精品视频| 一本大道香蕉久在线播放29| 夜色77av精品影院| 国产精品久久久久久久天堂| 欧美在线视频一区| 国产成人精品免费久久久久| 亚洲人成在线观| 日韩av在线免费观看| 2019中文字幕在线免费观看| 91po在线观看91精品国产性色| 最新国产成人av网站网址麻豆| 久久精品国产成人精品| 日韩精品在线播放| 欧美丰满少妇xxxx| 国产精品日韩精品| 日韩精品免费综合视频在线播放| 精品福利视频导航| 日本久久91av| 日本精品免费一区二区三区| 在线不卡国产精品| 亚洲一区中文字幕| 欧美性猛交xxxx乱大交3| 成人黄色免费网站在线观看| 国产欧美在线观看| 国产亚洲精品久久久久久777| 日韩专区在线观看| 欧美一级淫片aaaaaaa视频| 亚洲香蕉成人av网站在线观看| 亚洲视频日韩精品| 国产视频999| 久久视频在线看| 亚洲成年人在线播放| 亚洲午夜未满十八勿入免费观看全集| 亚洲国产精品资源| 亚洲女人天堂成人av在线| 久久久久久九九九| 青青草精品毛片| 欧美性受xxx| 91麻豆国产精品| www.xxxx欧美| 国产成+人+综合+亚洲欧洲| 亚洲第一精品夜夜躁人人爽| 成人亚洲欧美一区二区三区| 91日本视频在线| 91久久久久久久久久久久久| 国产精品久久久久久久久免费看| 欧亚精品在线观看| 精品久久久久久久久久国产| 久久免费精品日本久久中文字幕| 久久久伊人欧美| 高潮白浆女日韩av免费看| 亚洲第一偷拍网| 日韩三级成人av网| 亚洲a在线播放| 国产欧美日韩丝袜精品一区| 精品久久久久人成| 国产在线精品自拍| 国产亚洲欧洲黄色| 亚洲欧美日韩国产中文| 国产精品久久久久久久久男| 2021久久精品国产99国产精品| 日韩在线免费视频| 中文字幕国产亚洲2019| 国产97在线播放| 97久久精品人人澡人人爽缅北| 欧美天天综合色影久久精品| 欧美色图在线视频| 亚洲欧美一区二区精品久久久| 国产精品视频自拍| 久久精品亚洲94久久精品| 国产亚洲精品成人av久久ww| 日韩专区在线观看| 日韩精品视频免费专区在线播放| 亚洲美女性生活视频| 欧美与黑人午夜性猛交久久久| 久久精品国产亚洲精品2020| 欧美俄罗斯乱妇| 欧美精品久久久久a| 米奇精品一区二区三区在线观看| 91在线视频导航| 久久久亚洲影院你懂的| 欧美亚洲一区在线| 久久躁狠狠躁夜夜爽| 国产精品偷伦视频免费观看国产| 日韩美女视频免费在线观看| 久热精品视频在线观看| 啪一啪鲁一鲁2019在线视频| 日韩av免费在线观看| 91精品免费久久久久久久久| 久久久精品国产亚洲| 亚洲精品www久久久| 精品国内产的精品视频在线观看| 一区二区在线免费视频| 欧美高清在线播放| 欧洲精品毛片网站| 欧美体内谢she精2性欧美| 欧美怡春院一区二区三区| 一本一本久久a久久精品综合小说| 国产精品444| 亚洲一区二区三区四区在线播放| 精品久久久久久国产91| 欧美一区深夜视频| 欧美成年人网站| 亚洲激情成人网| 国产精品久久久久久av福利| 日韩风俗一区 二区| 亚洲国产精品va在线观看黑人| 色777狠狠综合秋免鲁丝| 国产精品久久久久91| 美女性感视频久久久| 亚洲成人久久久久| 亚洲xxx自由成熟| 国产精品久久久久福利| 日韩在线视频导航| 久久天天躁狠狠躁夜夜av|