RabbitMQ C++客户端 RabbitMQ Client for Windows/Linux 超简单接收发送接口-最近更新2019-09-06

2023-11-16

消息队列设计精要

解耦是消息队列要解决的最本质问题。
所谓解耦,简单点讲就是一个事务,只关心核心的流程。而需要依赖其他系统但不那么重要的事情,有通知即可,无需等待结果。

如果下游有很多系统关心你的系统发出的通知的时候,果断地使用消息队列吧。

掰开了揉碎了看,最简单的消息队列可以做成一个消息转发器,把一次RPC做成两次RPC。发送者把消息投递到服务端,服务端再将消息转发一手到接收端,就是这么简单。

多线程版本示例 RabbitMQ C++客户端 RabbitMQ Client for Windows 超简单接收发送接口(多线程版)-最近更新2018-05-21
C接口版本示例 RabbitMQ C 客户端 超简单接收发送json接口
用户登录权限

rabbitmq的web管理界面无法使用guest用户登录

该资源(本人整理制作,知识付费,请尊重劳动者的成果)。需要的话扫描联系本文博客头像

关于服务端的安装与配置,请参考:Windows RabbitMQ服务端安装与配置详解 


消息队列的基本功能之一是进行广播。

RabbitMQ是持久化的MQ。

随时更新rabbitmq-c最新版本!Debug | Release 版本!一个发送接口 一个接收接口 简单至极!

持续更新最新rabbitmq-c

最近更新:

2019-09-06

测试结果:

(1)每次先建立连接,1秒钟发送110次,每次发送100条message,发送完1次断开连接,1秒发送1w条记录

(2)第一次建立连接,连接建立后重复调用publish发送,每次发送100条记录,不断开连接,平均每秒发送4.2w条记录

2019-03-23 支持到VS2015 Win23/x64/Release/Debug 使用最新的CMake
2018-05-02 周**的项目中连接失败发现内存泄漏,经过我跟踪发现上次的修改有BUG,现在已经改好,不再有内存泄漏。
2017-09-06 热心网友“『路遥』”修改了两种类型的内存泄漏
2017-02-05 Windows下,rabbitmq-c-master中增加了用CMake生成的sln工程
2016-12-29 修改链接失败的内存泄漏问题
2016-07-03 添加全局变量err,及其获取函数GetErr();Windows可以编译32位dll ;Linux可以编译so

Windows VS2017  

登录首页:

http://localhost:15672/    如果是异地服务器,需要填写服务器的IP才能访问

RabbitMQ服务器队列

全部资源

百度网盘

 

 

最新rabbitmq-c的源码编译生成的库文件

开发者可以直接使用CRabbitMQ类来解决上传下载,接口更方便好用

发送和接收的示例代码

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include "MessageQueue/RabbitMQ.h"
#include "MessageQueue/MessageBody.h"
#include <ctime>
using namespace std;


//--------------------------需要开发者自己填写的信息begin--------------------------------------
//服务端的一个Exchange,客户端发送的时候,如果没有则会创建;客户端取的时候,如果没有则取不到数据
CExchange my_test_exchange("MyTestExchange");
//服务端的一个消息队列,客户端发送的时候,如果没有则会创建;客户端取的时候,如果没有则取不到数据
CQueue my_test_queue("MyTestQueue");
//服务端Exchange与消息队列之间的绑定key,客户端发送的时候,如果没有则不能发送;客户端取的时候,如果没有则取不到数据
string my_test_bind_key("MyTestBindKey");
//RabbitMQ服务端IP
string rabbitmq_server_ip = "127.0.0.1";
//RabbitMQ服务端端口
int rabbitmq_server_port = 5672;
//RabbitMQ服务端登录用户名
string rabbitmq_server_user = "guest";
//RabbitMQ服务端登录密码
string rabbitmq_server_psw = "guest";
//--------------------------需要开发者自己填写的信息end--------------------------------------


//--------------------------建议开发者设置批量操作begin--------------------------------------
//建议将此值设置成500,或者1000.这样可以节省时间和网络资源。没有必要一条一条的发送或者取
int test_send_number = 10;
//--------------------------建议开发者设置批量操作end--------------------------------------
//引用全局变量

//发送数据到RabbitMQ服务的全部过程如下
void send_message_to_mq(void)
{
		vector<CMessage> message_array;
		CMessage message("");
		//制作test_send_number个消息,用于发送到RabbitMQ服务器
		for (int i=0;i<test_send_number;++i)
		{
			ostringstream oss;
			oss<<i;
			//这里创建你要发送的数据,放到CMessage的m_data成员变量中,从服务端取的时候也是一样从这个成员中取string
			message.m_data = "Hello"+oss.str();
			message_array.push_back(message);
		}
		string& err = GetErr();    
		//RabbitMQ服务器的连接信息,这里改成你自己的IP/PORT
		CRabbitMQ pro(rabbitmq_server_ip,rabbitmq_server_port,rabbitmq_server_user,rabbitmq_server_psw);

		if(pro.Connect(err)<0)
		{
			cout<<"连接失败!"<<endl;
			return ;
		}
		else
		{
			cout<<"连接成功!"<<endl;
		}

		//声明一个交换机,声明一次,下次不需要再次声明
		if(pro.exchange_declare(my_test_exchange, err) < 0)
		{
			cout<<"声明交换机失败!"<<endl;
			return ;
		}
		else
		{
			cout<<"声明交换机成功!"<<endl;
		}
		//声明一个队列,声明一次,下次不需要再次声明
		if( (pro.queue_declare(my_test_queue, err) < 0) ) 
		{
			cout<<"声明队列失败!"<<endl;
			return ;
		}
		else
		{
			cout<<"声明队列成功!"<<endl;
		}
		//将交换机绑定到队列, 绑定一次,后面不需要再绑定
		if( (pro.queue_bind(my_test_queue,my_test_exchange,my_test_bind_key, err)<0) ) 
		{
			cout<<"绑定队列失败!"<<endl;
			return ;
		}
		else
		{
			cout<<"绑定队列成功!"<<endl;
		}
		string my_test_root_key=my_test_bind_key;
		//发送数据到RabbitMQ服务器,可以反复调用从而实现连续发送数据
		int flag = pro.publish(message_array,my_test_root_key,err);

		if(flag<0)
		{
			cout<<"投递消息到MQ失败"<<endl;
		}
		else
		{
			cout<<"投递消息到MQ成功"<<endl;
			for (vector<CMessage>::iterator itr = message_array.begin(); itr != message_array.end(); ++itr)
			{
				cout<<"投递了:"<<(*itr).m_data<<endl;
			}
		}
		pro.__sleep(10);
		pro.Disconnect();
}
//从RabbitMQ取数据的全部过程如下
void get_message_from_mq(void)
{
		vector<CMessage> message_array;
		string& err = GetErr();    

		//RabbitMQ服务器的连接信息,这里改成你自己的IP/PORT
		CRabbitMQ pro(rabbitmq_server_ip,rabbitmq_server_port,rabbitmq_server_user,rabbitmq_server_psw);

		if(pro.Connect(err)<0)
		{
			cout<<"取消息时连接失败!"<<endl;
			return ;
		}
		else
		{
			cout<<"取消息时连接成功!"<<endl;
		}
		message_array.clear();
		//一次性取1000個消息,不足1000也无妨,有多少取到多少
		int get_number= test_send_number;
		::timeval tvb={0,10};
		//从RabbitMQ服务器取消息
		if(pro.consumer(my_test_queue,message_array,get_number,&tvb,err)<0)
		{
			cout<<"取消息失败!"<<endl;
		}
		else
		{
			cout<<"取消息成功!取到了"<<message_array.size()<<"个消息"<<endl;
			for (int i=0;i<message_array.size();i++)
			{
				cout<<"取到的消息:"<<message_array[i].m_data<<endl;
			}
		}
		pro.__sleep(10);
		pro.Disconnect();
}

int main(int ,char**)
{
	cout<<"Hello UseMQ!"<<endl;
	//发送消息
	send_message_to_mq();
	//取消息
	get_message_from_mq();
	cout<<"Hello UseMQ end!";
	return 0;
};

 

Windows运行效果:

 

Linux运行效果:

用户反馈

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RabbitMQ C++客户端 RabbitMQ Client for Windows/Linux 超简单接收发送接口-最近更新2019-09-06 的相关文章

  • 容器常用函数、algorithm头文件

    偶然发现有个
  • C++ 大话设计之《代理模式》(优缺点,设计原理,常用场景)

    代理模式是一种结构型模式 优点 可以实现对原对象的访问控制 代理对象可以在访问原对象之前执行一些额外操作 例如检查权限 记录日志等 可以提供额外的功能 代理对象可以在不修改原对象的情况下 为原对象提供额外的功能 可以减少客户端代码的复杂性
  • 【QT基础入门】1、QT开发环境搭建

    文章目录 一 学习所需要的软件 二 安装 VS2012 三 win10 下安装 QT 一 学习所需要的软件 Visual Studio 2012 Qt SDK 4 7 4 Qt Creator 2 4 1 Visutal Studio 20
  • 2021-10-26尤破金10.27外汇黄金白银实时操作策略布局

    黄金行情走势分析 周二 10月26日 国际金价回落 受到美元上扬打压 投资者在本周的关键央行政策会议前评估各国央行对日益增长的通胀压力可能做出的反应 分析师说 在当前的通胀环境下 黄金应能维持相对良好的支撑 直到我们得到美联储明确的鹰派转向
  • 2017总结

    这一年还是大部分时间做着开发的工作 在创业的一年多时间里 好像自己所做的事情不太像一个创业者做的事 用了太多的时间在具体的工作当中了 对于市场 对于营销推广都是在被动的接收 没有全面的 主动的去做事情 这也可能是我们做技术的出来创业的弊端
  • Vue.js 中hash路由和history路由原理及优缺点

    Vue js 中hash路由和history路由原理及优缺点 hash模式 原理 在 url 中的 之后对应的是 hash 值 其原理是通过hashChange 事件监听hash值的变化 根据路由表对应的hash值来判断加载对应的路由加载对
  • python基础----02-----字面量、变量、数据类型及其转换、标识符以及字符串、数据输入(input语句)

    一 字面量 1 字面量 字面量 在代码中 被写下来的的固定的值称之为字面量 类似C C 的字符串常量 1 1 常见的python值类型 Python中常见的值类型 实际上在C C 字面量和这里的类型还是有区别的 体现在内存存储中 字面量存储
  • 批处理命令将文件合并成一个pdf_如何在 Linux 命令行操作 PDF

    pdftk 命令提供了许多处理 PDF 的命令行操作 包括合并页面 加密文件 添加水印 压缩文件 甚至还有修复 PDF Sandra Henry stocker 作者 虽然 PDF 通常被认为是相当稳定的文件 但在 Linux 和其他系统上
  • linux修改用户名

    1 开root sudo passwd 2 修改sudoer 防止过程中用户权限不够 命令 gedit etc sudoer root ALL ALL ALL ALL 下添加 xxx ALL ALL ALL ALL 3 修改shadow g
  • 数论整理之唯一质因子分解方程

    唯一质因子分解方程 每个大于1的自然数均可写为质数的积 而且这些素因子按大小排列之后 写法仅有一种方式 标称 include
  • Qt getSaveFileName Qt date 获取显示当前时间和日期 文件

    保存文件 getSaveFileName QString strSaveName QFileDialog getSaveFileName this tr 保存的文件 tr demo a txt
  • C# SolidWorks 二次开发 API --- 实例:随机上色

    随机上色这个功能做起来不算复杂 但是要想做的比较完美也不简单 这一篇文章我就只做随机给装配体中的零件上色 上色前 上色后 简单的代码 private void btn setcolor Click object sender EventAr
  • FFMPEG推流摄像头

    一般的直播网站都使用OBS推流 其实ffmpeg也可以推流 在无界面环境下就可以推流使用 本文以Windows下为例 简单介绍下使用ffmpeg工具推流的方法和步骤 下载安装 下载地址 https ffmpeg zeranoe com bu
  • 使用源码安装的方式安装杀毒软件Clamav

    使用源码安装的方式安装杀毒软件Clamav 安装过程要解决的依赖有一个 libcurl 下载clamav源码包 wget http www clamav net downloads production clamav 0 102 3 tar
  • 微信小程序和网站显示灰色方法

    一 小程序设置 此时大家发现很多网站 app 小程序的整体色调全部变为了灰色 其实并不是所有的图标全部替换了灰色 只是在css中设置了一个属性 只要加上css样式即可 page webkit filter grayscale 95 全局可以
  • CSMA/CD和CSMA/CA详解

    CSMA CD CSMA CD Carrier Sense Multiple Access Collision Detect 即载波监听多路访问 冲突检测方法 在以太网中 所有的节点共享传输介质 如何保证传输介质有序 高效地为许多节点提供传
  • JAVA中正则表达式的使用

    正则表达式 用法 一 使用正则表达式对String进行匹配 1 控制匹配长度 1 使用 n 来精确控制 2 使用 n 表示大于等于n个 3 使用 m n 控制范围 4 使用 表示可以出现 0次或一次 5 使用 表示可以出现 0次或多次 6
  • 某乎搜索接口x-zse-96参数逆向学习分析,网站:aHR0cHM6Ly93d3cuemhpaHUuY29tLw==

    目标参数 x zse 96 参数分析 全局搜索x zse 96 只有两个地方出行 打上断点后刷新网页 从图中断点地方可以看到 搞清楚u f s 的由来就解决了x zse 96 可以看到s参数是由以下几部分组成 1 101 3 2 0 固定版
  • 【Solidity】internal、private、external、public区别

    public与private 对于public和private 相信学过其他主流语言的人都能明白 public修饰的变量和函数 任何用户或者合约都能调用和访问 private修饰的变量和函数 只能在其所在的合约中调用和访问 即使是其子合约也
  • python是面向对象还是面向过程的语言_关于python是面向对象还是面向过程的分析...

    关于python是面向对象还是面向过程的分析 发布时间 2020 04 07 16 10 55 来源 亿速云 阅读 24 作者 小新 今天小编给大家分享的是关于python是面向对象还是面向过程的分析 很多人都不太了解 今天小编为了让大家更

随机推荐

  • mac 快速安装brew

    安装homebrew好用的文章 mac下镜像飞速安装Homebrew教程 知乎 直接执行这个命令 bin bash c curl fsSL https gitee com ineo6 homebrew install raw master
  • 医疗虚拟仿真和虚拟现实有什么区别?哪个更好?

    随着我们在仿真教育中越来越多地使用新技术 区分虚拟模式的类型很重要 虚拟仿真是一个统称 用来概括术语来描述各种基于仿真的体验 从基于屏幕的平台到沉浸式虚拟现实 然而 各虚拟平台在保真度 沉浸感和临场感的水平上有很大差异 医疗教育中存在许多虚
  • html毛玻璃背景代码,css毛玻璃背景的制作

    今天早上 听到有人说拼多多上市 然后各种黑 说什么市场倒退了二十年 然后搬出那英当年的 雾里看花 说这首歌就是在讽刺假货横行 雾里看花 代表了一种 朦胧美 如果你喜欢朦胧美 那你也可能也会喜欢毛玻璃 毛玻璃 效果 本质上是对背景图片的部分区
  • 基于灰度的模板匹配(标准)

    原图 创建模板 在加了噪声的图中识别 代码 dev close window dev open window 0 0 599 464 black WindowID read image Image pumpe dev set draw ma
  • android下的定时器在关闭屏幕后会自己停掉解决方法

    好坑 没系统的学过android 写一东西 尼玛发现连着usb线 神马都正常 但是拔掉usb线后 屏幕自动关闭后 android下的定时器就失效了 尼玛 调了好久才发现的 那么 肿么办 会遇到这个问题 一般都是学过java 然后直接跑去写a
  • 25开灯与关卡蓝图

    下了个ue5试试 这节讲的是 蓝图 点光源切换是否可视 如果初始化 点光源可视 那么运行后就会切换成不可视 如果初始化时 点光源不可视 那么运行时可视 且比较了各种光源的差别 首先看是否可视的设置 即编辑器中初始化可视 运行起来就没灯光了
  • springboot使用外置的tomcat,启动的时候没有启动springboot应用

    springboot使用外置的tomcat 启动的时候没有启动springboot应用 虽然可以访问首页 但是点击超链接访问controller却是404错误 前台
  • 恐造成下一个“千年虫”的闰秒,遭科技巨头们联合抵制

    整理 彭慧中 责编 屠敏 出品 CSDN ID CSDNnews 近日 谷歌 Meta 微软和亚马逊四位科技巨头呼吁将闰秒取消 并称闰秒会对网络造成巨大影响 闰秒或将成为下一个类似 千年虫 bug的罪魁祸首 原来 除了闰年与闰月外 还有闰秒
  • Alibaba限流组件——Sentinel核心概念与流量控制

    目录 1 Sentinel介绍 1 1 Sentinel是什么 1 2 组成 1 3 关键概念 2 Sentinel流量控制案例 2 1 引入依赖 2 2 使用Sentinel提供的API实现流量控制 2 2 1 写一个有返回值的接口 2
  • MyBatis 工具学习笔记(基础)

    What s this 是一款优秀的持久层框架 用于简化 JDBC 开发 是 Apache 的一个开源项目 Java EE 三层架构 表现层 业务层 持久层 存储层 持久层 负责将数据保存到数据库的那一层代码 ORM Object Rela
  • Lumen开发:Lumen的异常处理机制

    版权声明 本文为博主原创文章 未经博主允许不得转载 Lumen的核心类Application引用了专门用于异常处理的RegistersExceptionHandlers class Application extends Container
  • 内存段分配方案

    复杂度3 5 机密度3 5 最后更新2021 04 21 每个进程都有自己的有效地址空间 这个地址空间有些段已经预先被分配或占用 共享 有些等待进程自己进行分配 对进程来说 有2个参数4种组合 32位或64位程序 内核态进程或者用户态进程
  • Spring Boot 静态资源处理(六)

    目录 1 Servlet 方式相同 2 Spring MVC 方式 2 1 为静态资源添加版本号 2 1 1 指定版本号 2 1 2 使用 MD5 作为版本号 2 2 gzip 压缩 3 3 chain cache 2 4 省略 webja
  • 【VUE - 工具 - TIFF】01、前端vue+tiffjs预览显示在线tiff图片

    前言 需求 通过其他工具前置切出来 并放在服务器目录下的tiff图片 项目需要在前端预览显示 实现方式 基于vue tiffjs实现 实现 1 实现效果 npm VUE实现 1 安装依赖 npm i tiff js S yarn add t
  • 计算机在多媒体技术中的应用,06多媒体技术在计算机试题中的应用.doc

    06多媒体技术在计算机试题中的应用 第1题 下列关于多媒体技术主要特征的描述 正确的是 A 多媒体信息必须是数字信息 B 计算机主要处理模拟信息 C 模拟数据是多媒体技术的核心 D Flash动画是模拟化数据 答案 A 第2题 存储一张20
  • http协议面试

    1 说一下什么是Http协议 对器客户端和 服务器端之间数据传输的格式规范 格式简称为 超文本传输协议 2 什么是Http协议无状态协议 怎么解决Http协议无状态协议 曾经去某创业公司问到 无状态协议对于事务处理没有记忆能力 缺少状态意味
  • CUDA详解-GPU架构

    每个线程有自己的私有本地内存 Local Memory 而每个线程块有包含共享内存 Shared Memory 可以被线程块中所有线程共享 其生命周期与线程块一致 此外 所有的线程都可以访问全局内存 Global Memory 还可以访问一
  • html图片加载太慢如何解决办法,如何解决CSS JS和图片对网站加载速度的影响

    对于网站加载速度的严格要求一致是seo优化过程中的重点 如何提升网站加载速度 服务器 网站内容元素等都有很大的关系 本篇文章将从CSS JS和图片三个方面进行详细的讲解 1 图片 1 指定图像尺寸 加载图像之前 您的浏览器开始渲染页面 制定
  • Remote Sensing 从投稿到录用

    一 刊物介绍 最新升级版大类分区仍然是二区TOP期刊 这个期刊现在业界褒贬不一 今年影响因子已经上升到4 848 可以作为一区文章被拒之后的首选 研究方向 无线传感器网络的定位与导航 投稿 Remote Sensing Remote Sen
  • RabbitMQ C++客户端 RabbitMQ Client for Windows/Linux 超简单接收发送接口-最近更新2019-09-06

    消息队列设计精要 解耦是消息队列要解决的最本质问题 所谓解耦 简单点讲就是一个事务 只关心核心的流程 而需要依赖其他系统但不那么重要的事情 有通知即可 无需等待结果 如果下游有很多系统关心你的系统发出的通知的时候 果断地使用消息队列吧 掰开