rabbitmq windows 连接 linux,RabbitMQ C++客户端 RabbitMQ Client for Windows/Linux 超简单接收发送接口-最近更新2018-05-02...

本文介绍了RabbitMQ作为消息队列如何实现解耦,并提供了C++接口的示例代码,包括发送和接收消息的过程。内容涵盖了RabbitMQ的持久化特性、错误处理以及Windows和Linux平台的编译说明。此外,还展示了如何通过RabbitMQ进行批量操作以提高效率。
摘要由CSDN通过智能技术生成

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

解耦是消息队列要解决的最本质问题。

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

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

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

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

RabbitMQ是持久化的MQ。

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

持续更新最新rabbitmq-c

最近更新:

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 VS2010

Linux (CentOS)g++

登录首页:

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

RabbitMQ服务器队列

e9df3b62b35654a985e337101abec719.png

全部资源

百度网盘

c7c5fcb9e519292d44757b4f90f47a46.png

4c38ac3f8d06c8a1ea0e51654c6636ae.png

ec0dceb8e8c3007eea3b2da4e2e746e4.png

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

40985549b0feb29821a06fac0e586582.png

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

发送和接收的示例代码

#include

#include

#include

#include

#include "MessageQueue/RabbitMQ.h"

#include "MessageQueue/MessageBody.h"

#include

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 message_array;

CMessage message("");

//制作test_send_number个消息,用于发送到RabbitMQ服务器

for (int i=0;i

{

ostringstream oss;

oss<

//这里创建你要发送的数据,放到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<

return ;

}

else

{

cout<

}

//声明一个交换机,声明一次,下次不需要再次声明

if(pro.exchange_declare(my_test_exchange, err) < 0)

{

cout<

return ;

}

else

{

cout<

}

//声明一个队列,声明一次,下次不需要再次声明

if( (pro.queue_declare(my_test_queue, err) < 0) )

{

cout<

return ;

}

else

{

cout<

}

//将交换机绑定到队列, 绑定一次,后面不需要再绑定

if( (pro.queue_bind(my_test_queue,my_test_exchange,my_test_bind_key, err)<0) )

{

cout<

return ;

}

else

{

cout<

}

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<

}

else

{

cout<

for (vector::iterator itr = message_array.begin(); itr != message_array.end(); ++itr)

{

cout<

}

}

pro.__sleep(10);

pro.Disconnect();

}

//从RabbitMQ取数据的全部过程如下

void get_message_from_mq(void)

{

vector 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<

return ;

}

else

{

cout<

}

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<

}

else

{

cout<

for (int i=0;i

{

cout<

}

}

pro.__sleep(10);

pro.Disconnect();

}

int main(int ,char**)

{

cout<

//发送消息

send_message_to_mq();

//取消息

get_message_from_mq();

cout<

return 0;

};

Windows运行效果:

85b7d3c50764a352e98e81cc2c3f6e34.png

Linux运行效果:

1f111c08a132c046db14de4682774687.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值