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
rabbiitmq非阻塞调用的更多相关文章
- Linux下同步模式、异步模式、阻塞调用、非阻塞调用总结
转自:http://www.360doc.com/content/13/0117/12/5073814_260691714.shtml 同步和异步:与消息的通知机制有关. 本质区别 现实例子 同步模式 ...
- 2017年5月12日15:10:46 rabbitmq不支持非阻塞调用服务器
就像昨天碰到的问题描述一样,问题不是出在消费者上而是在生产者发送消息出现没有得到返回值时消息通道被挂起,rabbitmq发送的消息是阻塞调用即当发生阻塞时,继续发送的消息都堆在后面.在网上看到有两个方 ...
- php fsockopen()方法,简化,异步非阻塞调用
介绍在项目中遇到一个问题,就是php是同步的读取下来的,如果一个方法请求的时间长了一点, 那么整个程序走下去将会遇到阻塞,现在我想触发这个方法,但是又不影响我下下面的程序正常的走下去.查了一上午的方法 ...
- 精讲响应式WebClient第2篇-GET请求阻塞与非阻塞调用方法详解
本文是精讲响应式WebClient第2篇,前篇的blog访问地址如下: 精讲响应式webclient第1篇-响应式非阻塞IO与基础用法 在上一篇文章为大家介绍了响应式IO模型和WebClient的基本 ...
- 非阻塞/异步(epoll) openssl
前段时间在自己的异步网络框架handy中添加openssl的支持,当时在网络上搜索了半天也没有找到很好的例子,后来自己慢慢的摸索,耗费不少时间,终于搞定.因此把相关的资料整理一下,并给出简单的例子,让 ...
- 同步异步,阻塞非阻塞 和nginx的IO模型
同步与异步 同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication).所谓同步,就是在发出一个*调用*时,在没有得 ...
- I/O阻塞非阻塞,同步异步
http://www.cnblogs.com/luotianshuai/p/5098408.html "阻塞"与"非阻塞"与"同步"与&qu ...
- Linux 网络编程七(非阻塞socket:epoll--select)
阻塞socket --阻塞调用是指调用结果返回之前,当前线程会被挂起.函数只有在得到结果之后才会返回. --对于文件操作 read,fread函数调用会将线程阻塞(平常使用read感觉不出来阻塞, 因 ...
- 【MPI学习4】MPI并行程序设计模式:非阻塞通信MPI程序设计
这一章讲了MPI非阻塞通信的原理和一些函数接口,最后再用非阻塞通信方式实现Jacobi迭代,记录学习中的一些知识. (1)阻塞通信与非阻塞通信 阻塞通信调用时,整个程序只能执行通信相关的内容,而无法执 ...
随机推荐
- POJ 1511 Invitation Cards ( 双向单源最短路 || 最小来回花费 )
题意 : 给出 P 个顶点以及 Q 条有向边,求第一个点到其他各点距离之和+其他各点到第一个点的距离之和的最小值 分析 : 不难看出 min( 第一个点到其他各点距离之和+其他各点到第一个点的距离之和 ...
- Android中对Apk加固(加壳)续篇之---对Native层(so文件)进行加固
有人说Android程序用Java代码写的,再怎么弄都是不安全的,很容易破解的,现在晚上关于应用加固的技术也很多了,当然这些也可以用于商业发展的,梆梆加密和爱加密就是很好的例子,当然这两家加固的Apk ...
- 批量搞机(一):ansible简介、ansible安装
一.ansible简介 Ansible是2013年推出的一款IT自动化和DevOps软件,目前由Redhat已签署Ansible收购协议.其是基于Python研发,糅合了很多老运维工具的优点实现了批量 ...
- PHP垃圾回收深入理解
转摘于http://www.cnblogs.com/lovehappying/p/3679356.html PHP是一门托管型语言,在PHP编程中程序员不需要手工处理内存资源的分配与释放(使用C编写P ...
- python 数值系列-进制转换
进制转换 前语: 如果您不通二进制,八进制,十六进制,请移步:http://www.360doc.com/content/17/0211/21/40101294_628326994.shtml 问题 ...
- C#-概念-类库:类库
ylbtech-C#-概念-类库:类库 1.返回顶部 1. 类库(Class Library)是一个综合性的面向对象的可重用类型集合,这些类型包括:接口.抽象类和具体类.类库可以解决一系列常见编程任务 ...
- npm install 安装不成功,提示python2.7
npm install 安装不成功的原因 是因为缺少python的环境 解决方法: 1.去官网下载https://www.python.org/download/releases/2.7/ 2.安装成 ...
- JAVA File的创建及相对路径绝对路径
http://blog.sina.com.cn/s/blog_9386f17b0100w2vv.html JAVA File的创建及相对路径绝对路径 (2011-12-09 08:27:56) 转载▼ ...
- tp 框架目录结构
ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的.最早诞生于2006年初,2007年元旦正式更名为ThinkPHP,并且遵循Apache2开源协议发布.ThinkPHP从诞生以来一 ...
- python实现处理excel单元格中的数据
实现代码如下: # 将数据单元格(格式为:参数名=值)里的数据以键值对的形式放入字典中,返回该字典 class get_string: def cut_string(self,string): # 将 ...