rabbitmq-c客戶端使用說明
rabbitmq-c是乙個用於c語言的,與amqp server進行互動的client庫,amqp協議為版本0-9-1。rabbitmq-c與server進行互動前需要首先進行login操作,在操作後,可以根據amqp協議規範,執行一系列操作。
這裡,根據專案需求,只進行部分介面說明,文後附demo的github位址。
介面描述:
amqp_connection_state_t amqp_new_connection(void);
介面說明:宣告乙個新的amqp connection
int amqp_open_socket(char const *hostname, int portnumber);
介面說明:獲取socket.
引數說明:hostname rabbitmq server所在主機
portnumber rabbitmq server監聽埠
void amqp_set_sockfd(amqp_connection_state_t state,int sockfd);
介面說明:將amqp connection和sockfd進行繫結
amqp_rpc_reply_t amqp_login(amqp_connection_state_t state, char const *vhost,int channel_max,int frame_max,int heartbeat,amqp_sasl_method_enum sasl_method, ...);
介面說明:用於登入rabbitmq server,主要目的為了進行許可權管理;
引數說明:state amqp connection
vhost rabbit-mq的虛機主機,是rabbit-mq進行許可權管理的最小單位
channel_max 最大鏈結數,此處設成0即可
frame_max 和客戶端通訊時所允許的最大的frame size.預設值為131072,增大這個值有助於提高吞吐,降低這個值有利於降低時延
heartbeat 含義未知,預設值填0
sasl_method 用於ssl鑑權,預設值參考後文demo
amqp_channel_open_ok_t *amqp_channel_open(amqp_connection_state_t state, amqp_channel_t channel);
介面說明:用於關聯conn和channel
amqp_exchange_declare_ok_t *amqp_exchange_declare(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t exchange, amqp_bytes_t type, amqp_boolean_t passive, amqp_boolean_t durable, amqp_table_t arguments);
介面說明:宣告declare
引數說明:state
channel
exchange
type "fanout" "direct" "topic"三選一
passive
curable
arguments
amqp_queue_declare_ok_t *amqp_queue_declare(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue, amqp_boolean_t passive, amqp_boolean_t durable, amqp_boolean_t exclusive, amqp_boolean_t auto_delete, amqp_table_t arguments);
介面說明:宣告queue
引數說明:state amqp connection
channel
queue queue name
passive
durable 佇列是否持久化
exclusive 當前連線不在時,佇列是否自動刪除
aoto_delete 沒有consumer時,佇列是否自動刪除
arguments 用於拓展引數,比如x-ha-policy用於mirrored queue
amqp_queue_bind_ok_t *amqp_queue_bind(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue, amqp_bytes_t exchange, amqp_bytes_t routing_key, amqp_tab le_t arguments);
介面說明:宣告binding
amqp_basic_qos_ok_t *amqp_basic_qos(amqp_connection_state_t state, amqp_channel_t channel, uint32_t prefetch_size, uint16_t prefetch_count, amqp_boolean_t global);
介面說明:qos是 quality of service,我們這裡使用主要用於控制預取訊息數,避免訊息按條數均勻分配,需要和no_ack配合使用
引數說明:state
channel
prefetch_size 以bytes為單位,0為unlimited
prefetch_count 預取的訊息條數
global
amqp_basic_consume_ok_t *amqp_basic_consume(amqp_connection_state_t state, amqp_channel_t channel, amqp_bytes_t queue, amqp_bytes_t consumer_tag, amqp_boolean_t no_local, amqp_boolean_t no_ack, amqp_boolean_t exclusive, amqp_table_t arguments);
介面說明:開始乙個queue consumer
引數說明:state
channel
queue
consumer_tag
no_local
no_ack 是否需要確認訊息後再從佇列中刪除訊息
exclusive
arguments
int amqp_basic_ack(amqp_connection_state_t state,amqp_channel_t channel,uint64_t delivery_tag,amqp_boolean_t multiple);
int amqp_basic_publish(amqp_connection_state_t state,amqp_channel_t channel,amqp_bytes_t exchange,amqp_bytes_t routing_key,amqp_boolean_t mandatory,amqp_boolean_t immediate,struct amqp_basic_properties_t_ const *properties,amqp_bytes_t body);
介面說明:發布訊息
引數說明:state
channel
exchange
routing_key 當exchange為預設「」時,此處填寫queue_name,當exchange為direct,此處為binding_key
mandatory 參見參考文獻2
immediate 同上
properties 更多屬性,如何設定訊息持久化,參見文後demo
body 訊息體
amqp_rpc_reply_t amqp_channel_close(amqp_connection_state_t state,amqp_channel_t channel,int code);
amqp_rpc_reply_t amqp_connection_close(amqp_connection_state_t state,int code);
int amqp_destroy_connection(amqp_connection_state_t state);
如何consume訊息,參見文後demo。
demo
其中 rmq_new_task.c和rmq_worker.c對應於rabbitmq tutorial裡的work queues章節(和receive_logs_direct.c對應於rabbitmq tutorial裡的routing章節(這兩個demo覆蓋了rabbitmq的常用應用場景。
編譯需要librabbitmq.a庫,同時需要rabbitmq-c提供的幾個標頭檔案(amqp.h和amqp_framing.h)以及utils.c檔案,這些在github project頁面均可獲得。
參考文獻
rabbitmq-c主頁
RabbitMQ使用者指南(RabbitMQ C)
rabbitmq c是乙個用於c語言的,與amqp server進行互動的client庫,amqp協議為版本0 9 1。rabbitmq c與server進行互動前需要首先進行login操作,在操作後,可以根據amqp協議規範,執行一系列操作。介面描述 amqp connection state t...
RabbitMQ使用者指南(RabbitMQ C)
rabbitmq c是乙個用於c語言的,與amqp server進行互動的client庫,amqp協議為版本0 9 1。rabbitmq c與server進行互動前需要首先進行login操作,在操作後,可以根據amqp協議規範,執行一系列操作。介面描述 amqp connection state t...
RabbitMQ使用指南
環境變數配置erlang home 安裝路徑 注意事項 安裝erlang 時注意 一致 c windows system32 config systemprofile erlang.cookie c users 使用者名稱 erlang.cookie 出現失敗時 rabbit service sta...