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
https://github.com/liuhaobupt/rabbitmq_work_queues_demo-with-rabbit-c-client-lib
其中 rmq_new_task.c和rmq_worker.c对应于RabbitMQ tutorial里的work queues章节(http://www.rabbitmq.com/tutorials/tutorial-two-python.html),emit_log_direct.c和receive_logs_direct.c对应于RabbitMQ tutorial里的routing章节(http://www.rabbitmq.com/tutorials/tutorial-four-python.html),这两个demo覆盖了RabbitMQ的常用应用场景。
编译需要librabbitmq.a库,同时需要rabbitmq-c提供的几个头文件(amqp.h和amqp_framing.h)以及utils.c文件,这些在github project页面均可获得。
参考文献
- rabbitmq-c主页 http://hg.rabbitmq.com/rabbitmq-c/summary
- http://www.rabbitmq.com/amqp-0-9-1-reference.html
RabbitMQ-C客户端使用说明相关推荐
- RabbitMQ服务客户端的的业务逻辑
RabbitMQ服务客户端的的业务逻辑如下: 1,打开 socket: amqp_new_connection(); amqp_open_socket(hostname, port ...
- 丽升评卷系统显示服务器地址错误,丽升网上阅卷客户端使用说明
丽升网上阅卷客户端使用说明 一.阅卷方法 1. 双击桌面上的图标. 2.输入服务器地址.用户名称.密码(默认是123),确定. 3.批阅试卷:(1)看试卷:(2)在得分面板中输入得分:(3)点击提交( ...
- RabbitMQ GUI客户端工具(RabbitMQ Assistant)
RabbitMQ GUI客户端工具(RabbitMQ Assistant) RabbitMQ 是一个开源消息代理软件(有时称为面向消息的中间件),它最初实现了高级消息队列协议 (AMQP),后来扩展了 ...
- 几年前,我撸了一套RabbitMQ的客户端
不好意思,又好多天没更文章了-- 眼看着离过年越来越近了,很多工作都要在年前冲刺.收个尾.比如:工作总结.绩效考核.奖金.确定今年 KPI-- 由于我负责的部门一百多人,虽然有下面的各位 Leader ...
- RabbitMQ入门教程——.NET客户端使用
众所周知RabbitMQ使用的是AMQP协议.我们知道AMQP是一种网络协议,能够支持符合要求的客户端应用和消息中间件代理之间进行通信. 其中消息代理扮演的角色就是从生产者那儿接受消息,并根据既定的路 ...
- 《RabbitMQ 实战指南》第三章 客户端开发向导
<RabbitMQ 实战指南> 文章目录 <RabbitMQ 实战指南> 一.简介 二.连接 RabbitMQ 三.使用交换器和队列 1.exchangeDeclare 方法详 ...
- Windows下当地RabbitMQ服务的安装
Windows下本地RabbitMQ服务的安装 本文参考:刘若泽相关技术文档 当然这些内容页可以通过RabbitMQ官方网站获得. RabbitMQ配置说明手册 一.RaibbitMQ服务器配置 1. ...
- 别人家的团队怎么用RabbitMQ:我总结的5点规范
大概从 2013 年开始,我就开始了自己和 RabbitMQ 的接触,到现在已经有七年多了. 在这七年中,既有一些对 RabbitMQ 的深度体验,更有无数的血泪史. 而根据我这么多年的使用经验,我将 ...
- 趋势修改服务器地址,趋势客户端修改连接服务器
趋势客户端修改连接服务器 内容精选 换一换 GaussDB(DWS) 支持SSL认证方式的连接,以加密GaussDB(DWS) 客户端与数据库之间传输的数据.SSL连接方式的安全性高于普通模式,集群默 ...
- MQ对比之RabbitMQ Redis
消息队列选择:RabbitMQ & Redis RabbitMQ RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现的产品,Rabb ...
最新文章
- 中国电子学会青少年编程能力等级测试图形化四级编程题:排序
- java rotatetransition_transition过渡,transform变换
- STM32之CAN---中断管理浅析
- Spring Cloud(二) Consul 服务治理实现
- 2011年度十大杰出IT博客获奖感言
- mysql8.0与mysql7.0_MySQL 5.7 vs 8.0,哪个性能更牛?
- Git 几个常用操作
- 计算机网络之传输层:4、TCP连接管理
- TypeScript入门教程 之 Let 关键字
- Springboot应用中线程池配置教程(2021版)
- gin框架-1请求参数的示例:
- 解决在IE浏览器中JQuery.resize()执行多次的方法(转)
- 过程生产excel_通用Excel做销售订单动态展示板
- 【黑群晖】搭建共享存储云盘系统
- 入门力扣自学笔记96 C++ (题目编号749)
- js简单图解冒泡排序
- Spider爬虫笔记[更新中...]
- H264 数据帧头分析
- 大数据存储1----什么是hdfs!!!
- 临终关怀?抑或一切照旧?PR咋又更新了?