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非阻塞调用的更多相关文章

  1. Linux下同步模式、异步模式、阻塞调用、非阻塞调用总结

    转自:http://www.360doc.com/content/13/0117/12/5073814_260691714.shtml 同步和异步:与消息的通知机制有关. 本质区别 现实例子 同步模式 ...

  2. 2017年5月12日15:10:46 rabbitmq不支持非阻塞调用服务器

    就像昨天碰到的问题描述一样,问题不是出在消费者上而是在生产者发送消息出现没有得到返回值时消息通道被挂起,rabbitmq发送的消息是阻塞调用即当发生阻塞时,继续发送的消息都堆在后面.在网上看到有两个方 ...

  3. php fsockopen()方法,简化,异步非阻塞调用

    介绍在项目中遇到一个问题,就是php是同步的读取下来的,如果一个方法请求的时间长了一点, 那么整个程序走下去将会遇到阻塞,现在我想触发这个方法,但是又不影响我下下面的程序正常的走下去.查了一上午的方法 ...

  4. 精讲响应式WebClient第2篇-GET请求阻塞与非阻塞调用方法详解

    本文是精讲响应式WebClient第2篇,前篇的blog访问地址如下: 精讲响应式webclient第1篇-响应式非阻塞IO与基础用法 在上一篇文章为大家介绍了响应式IO模型和WebClient的基本 ...

  5. 非阻塞/异步(epoll) openssl

    前段时间在自己的异步网络框架handy中添加openssl的支持,当时在网络上搜索了半天也没有找到很好的例子,后来自己慢慢的摸索,耗费不少时间,终于搞定.因此把相关的资料整理一下,并给出简单的例子,让 ...

  6. 同步异步,阻塞非阻塞 和nginx的IO模型

    同步与异步 同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication).所谓同步,就是在发出一个*调用*时,在没有得 ...

  7. I/O阻塞非阻塞,同步异步

    http://www.cnblogs.com/luotianshuai/p/5098408.html "阻塞"与"非阻塞"与"同步"与&qu ...

  8. Linux 网络编程七(非阻塞socket:epoll--select)

    阻塞socket --阻塞调用是指调用结果返回之前,当前线程会被挂起.函数只有在得到结果之后才会返回. --对于文件操作 read,fread函数调用会将线程阻塞(平常使用read感觉不出来阻塞, 因 ...

  9. 【MPI学习4】MPI并行程序设计模式:非阻塞通信MPI程序设计

    这一章讲了MPI非阻塞通信的原理和一些函数接口,最后再用非阻塞通信方式实现Jacobi迭代,记录学习中的一些知识. (1)阻塞通信与非阻塞通信 阻塞通信调用时,整个程序只能执行通信相关的内容,而无法执 ...

随机推荐

  1. BZOJ 2286: [Sdoi2011]消耗战 虚树

    Description 在一场战争中,战场由n个岛屿和n-1个桥梁组成,保证每两个岛屿间有且仅有一条路径可达.现在,我军已经侦查到敌军的总部在编号为1的岛屿,而且他们已经没有足够多的能源维系战斗,我军 ...

  2. 学习日记9、easyui控件两次请求服务器端问题

    <select id="BankCard" class="easyui-combobox" style="width: 600px;" ...

  3. sql-hive笔试题整理 1 (学生表-成绩表-课程表-教师表)

    题记:一直在写各种sql查询语句,最长的有一百多行,自信什么需求都可以接,可......,想了想,可能一直在固定的场景下写,平时也是以满足实际需求为目的,竟不知道应试的题都是怎么出的,又应该怎么做.遂 ...

  4. js+html实现玫瑰花绽放

    玫瑰花示例demo: <!DOCTYPE html> <html> <head> <title>玫瑰花</title> <meta c ...

  5. Windows建立目录软连接

    创建:mklink /j "I:\dst" "I:\src" 删除: rmdir "I:\dst"

  6. JMeter 分布式调度压测部署

    我们遇到jmeter被假死死了,这里有2个原因,一是jmeter原本是java写的,heap受硬件限制需要调优,二是单机无法分解超大并发比如100万+并发压测,因此,我们分二部走,首先我们需要进行jm ...

  7. ruby的next if boolean

    next相当于continue

  8. leetcode 189. 旋转数组(python)

    给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: ...

  9. 使用 GitLab 的 OAuth2 认证服务

    原文地址 本文档讲述如何使用 GitLab 作为 OAuth 认证服务提供商,以通过 GitLab 的 OAuth 认证登录其他服务(例如持续集成工具 Drone). 如果想使用其他 OAuth 身份 ...

  10. Redux生态系统

    生态系统 Redux 是一个体小精悍的库,但它相关的内容和 API 都是精挑细选的,足以衍生出丰富的工具集和可扩展的生态系统. 如果需要关于 Redux 所有内容的列表,推荐移步至 Awesome R ...