rabbiitmq非阻塞调用

https://blog.csdn.net/panxianzhan/article/details/50755409

https://blog.csdn.net/u013946356/article/details/82420489?utm_source=blogxgwz0

最近项目用到rabbit,客户端使用rabbitmq-c库,网上没有多少中文的说明,因此对使用到的函数做了总结:

amqp_new_connection

函数作用:分配和初始化一个新amqp连接对象

函数原型:amqp_connection_state_t  amqp_new_connection(void);

参数:无

返回值:成功返回amqp连接对象,失败返回NULL

amqp_tcp_socket_new

函数作用:创建tcp socket

函数原型:amqp_socket_t * amqp_tcp_socket_new(amqp_connection_state_t state);

参数: amqp连接对象

返回值:成功返回 tcpsocket,失败返回NULL

amqp_socket_open_noblock

函数作用:非阻塞方式打开socket连接

函数原型:int  amqp_socket_open_noblock(amqp_socket_t *self, const char *host,int port, struct timeval *timeout);

参数: self socket套接字

 host ip

   port 端口

   timeout 连接超时时间

返回值:成功0,失败非0

amqp_login

函数作用:登陆rabbitmq

函数原型: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, ...);

参数:state amqp连接对象

                vhost virtual host

                channel_max channel最大连接数,0代表没有限制

frame_max 和客户端通信时所允许的最大的frame size.默认值为131072,增大这个值有助于提高吞吐,降低这个值有利于降低时延

                    heartbeat 心跳间隔,0关闭心跳,只支持部分功能的心跳

sasl_method 验证方式 MQP_SASL_METHOD_PLAIN:跟两个参数const char* username,and const char* password.AMQP_SASL_METHOD_EXTERNAL:跟参数const char* identity.

返回值:执行结果

amqp_channel_open

函数作用:打开连接通道

函数原型:amqp_channel_open_ok_t *amqp_channel_open(amqp_connection_state_t state, amqp_channel_t channel);

参数:state amqp连接对象

     channel 连接通道

返回值:channel_id

amqp_exchange_declare

函数作用:声明exchange

函数原型: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_boolean_t auto_delete, amqp_boolean_t internal,amqp_table_t arguments);

参数:state amqp连接对象

     channel 连接通道

     exchange 交换机

     type 交换机类型  fanout 广播 direct直接绑定 topic主题模糊匹配

     passive 如果为1, 但是交换机之前并不存在, 就会返回失败

     durable 1持久化 0非持久化

     auto_delete 1没有exchange绑定后删除队列 0不删除

     internal 0可以直接使用 1不能直接使用,只能绑定到其他exchange使用

     arguments 扩展参数

返回值:channel_id

amqp_queue_declare

函数作用:声明队列

函数原型:amqp_queue_declare_ok_t *AMQP_CALLamqp_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);

参数:state amqp连接对象

     channel 连接通道

     queue 队列

     passive 如果为1, 但是队列之前并不存在, 就会返回失败

     durable 1持久化 0非持久化

exclusive 1当前连接不在时,队列自动删除 0当前连接不在时,队列不自动删除

auto_delete 1没有consumer时,队列自动删除 0没有consumer时,队列不自动删除

返回值:channel_id

amqp_queue_bind

函数作用:绑定交换机和队列

函数原型:amqp_queue_bind_ok_t *AMQP_CALL amqp_queue_bind(amqp_connection_s           tate_t state, amqp_channel_t channel, amqp_bytes_t queue,amqp_bytes_t exch     ange, amqp_bytes_t routing_key, amqp_table_t arguments);

参数:state amqp连接对象

     channel 连接通道

     queue 队列

     exchange 交换机

     routing_key 路由

     arguments 扩展参数

返回值:channel_id

amqp_basic_publish

函数作用:发布消息

函数原型: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,structamqp_basic_properties_t_ const *properties, amqp_bytes_t body);

参数:state amqp连接对象

     channel 连接通道

     exchange 交换机

     routing_key 路由

     mandatory 1消息必须路由到存在的队列,否则返回失败

     immediate 1如果消息没有订阅,返回失败

     properties 属性

     body 消息体

返回值:是否成功

amqp_basic_consume

函数作用:开始一个queue consumer

函数原型:amqp_basic_consume_ok_t * amqp_basic_consume(amqp_connection_statet 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);

参数:state amqp连接对象

     channel 连接通道

     queue 队列

     consumer_tag     consumer标识  

     no_local 1不接收 0接收

     no_ack 1不回复 0恢复

         exclusive 1当前连接不在时,队列自动删除 0当前连接不在时,队列不自动删除

     arguments 扩展参数

返回值:结果

amqp_consume_message

函数作用:接收消息

函数原型:amqp_rpc_reply_t amqp_consume_message(amqp_connection_state_t state, amqp_envelope_t *envelope, struct timeval *timeout, int flags);

参数:state amqp连接对象

     envelope 消息包

     timeout 接收超时时间

     flags 保留值0

返回值:结果

amqp_channel_close

函数作用:关闭通道

函数原型:amqp_rpc_reply_t amqp_channel_close(amqp_connection_state_t state,

amqp_channel_t channel, int code);

参数:state amqp连接对象

     channel 连接通道

     code 关闭类型,默认AMQP_REPLY_SUCCESS

返回值:关闭结果

amqp_destroy_envelope

函数作用:销毁消息包

函数原型:void amqp_destroy_envelope(amqp_envelope_t*envelope)

参数:envelope消息包

返回值:无

amqp_connection_close

函数作用:关闭连接

函数原型:amqp_rpc_reply_t  amqp_connection_close(amqp_connection_state_t state, int code);

参数:state amqp连接对象

code 关闭类型,默认AMQP_REPLY_SUCCESS

返回值:关闭结果

amqp_destroy_connection

函数作用:销毁连接对象

函数原型:int amqp_destroy_connection(amqp_connection_state_t state);

参数:state amqp连接对象

返回值:关闭结果
 
原文:https://blog.csdn.net/u013946356/article/details/82420489
 

猜你喜欢

转载自www.cnblogs.com/hshy/p/11058699.html