RabbitMQ使用者指南(RabbitMQ C)

2021-06-22 12:53:47 字數 4388 閱讀 1092

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...