1. 程式人生 > >RabbitMQ第六課 例子說明

RabbitMQ第六課 例子說明

無法發送 返回 exce serve 結果 replay 回復 函數 隊列

RabbitMQ Web管理端口是15672


RabbitMQ example例子中默認連接端口是5672。
第一次啟動example,測試連接服務器,端口填寫錯誤,連接失敗,返回 connection closed unexpectedly

die_on_amqp_error(amqp_login(conn, "/", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN,"guest", "guest")
使用用戶名guest ,密碼guest。登陸出現如下的錯誤:User can only log in via localhost

默認情況下guest是無法發送數據的,必須進行修改


amqp_consumer和amqp_producer例子中並沒有指定交換機的類型,說明當前交換機的創建權力交給其他的創建者在這裏,並沒有並沒有指定隊列名稱,而是通過指定routing_key,來關聯相應的隊列名。匹配的方式根據交換機的類型來確定

amqp_consume_message函數執行的返回值保存在amqp_rpc_reply_t ret;

/**
* Response type
*
* \since v0.1
*/

typedef enum amqp_response_type_enum_
{
AMQP_RESPONSE_NONE = 0, /**< the library got an EOF from the socket */


AMQP_RESPONSE_NORMAL, /**< response normal, the RPC completed successfully */

AMQP_RESPONSE_LIBRARY_EXCEPTION, /**< library error, an error occurred in the
library, examine the library_error */

AMQP_RESPONSE_SERVER_EXCEPTION /**< server exception, the broker returned an
error, check replay */
} amqp_response_type_enum;
默認情況下ret.reply_type等於AMQP_RESPONSE_NORMAL說明回復正常,RPC正確執行。AMQP_RESPONSE_LIBRARY_EXCEPTION說明在函數
調用過程中返回結果異常(並不是說編譯的庫出現問題,而是在跟服務器通信的時候,遇到其他的異常,例如接收超時,例如連接斷開等等)

例如,當接收超時的時候ret.library_error的返回值是-13,操作超時
AMQP_STATUS_TIMEOUT = -0x000D, /**< Operation timed out */

AMQP_STATUS_SOCKET_ERROR = -0x0009, /**< A socket error
occurred */
當跟服務器斷開連接的時候,會返回-9錯誤碼,在例子中並沒有處理這種異常情況,實際上需要進行重連


RabbitMQ第六課 例子說明