RabbitMQ 的介绍可以到官网查询,这里就不写了。附上官网地址:https://www.rabbitmq.com/getstarted.html
上面简介摘自作者:FelixCoder
链接:https://www.jianshu.com/p/e66849f17c36
RabbitMQ官网并没有C或C++写的例子,关于在windows端写C++的RabbitMQ客户端的代码网上也有很多,但是对于新手不是很友好,有的例子只能在linux系统才能编译的,还有些写得云里雾里的根本不知道怎么来的又怎么去的。所以作为开荒者,我想写得更详细些,可以帮助有需要的朋友。
win32的RabbitMQ 客户端发送跟接收功能
windows 10
visual studio 2019
cmake 3.16.0
https://cmake.org/download/
vcpkg 2019.09.12
RabbitMQ 服务端windows版
https://www.rabbitmq.com/download.html
上面这些工具是要用到的,不知道是什么可以上百度找一下。
RabbitMQ是要依赖Erlang的,安装之前先装Erlang。
Erlang官网http://www.erlang.org/downloads
官网http://www.rabbitmq.com/
工程使用的版本是otp_win64_22.1 跟rabbitmq-server-3.8.1。如果发现版本不兼容,可以尝试装这两个版本。
安装完之后可通过访问 http://localhost:15672 进行测试,默认登录账户为:guest / guest
如果浏览器打不开,是因为默认没有使用管理模块的插件,只需在cmd命令窗口开启相应的插件即可。
cmd进入RabbitMQ安装目录的sbin目录下,执行下面两条命令:
# 开启RabbitMQ节点
rabbitmqctl start_app
# 开启RabbitMQ管理模块的插件,并配置到RabbitMQ节点上
rabbitmq-plugins enable rabbitmq_management
如果有需要关闭RabbitMQ节点,可以使用下面的命令:
rabbitmqctl stop
拉取RabbitMQ-c源码:https://github.com/alanxz/rabbitmq-c.git
然后打开cmake软件,构建VS工程文件。
注意取消勾选ENABLE_SSL_SUPPORT,然后依次点击下面的按钮
点击configure按钮,我测试生成的是VS2019工程,32位程序
如果要修改生成配置,可以点击File->Delete Cache
生成成功之后在输出文件夹就可以看到我们的VS代码
直接双击.sln文件就可以用VS打开工程源码。
我们build的是Release,32位程序,选中根项目右键生成
在生成目录下面就可以看到生成的库文件
1、需要依赖的库有:
boost-1.47.0 or newer (uses chrono, system internally in addition to other header based libraries such as sharedptr and noncopyable)
rabbitmq-c you'll need version 0.5.1 or better.
cmake 2.8+ what is needed for the build system
Doxygen OPTIONAL only necessary to generate API documentation(可不用,用来生成文档)
安装boost有点麻烦,这时候vcpkg就可以派上用场了,直接命令vcpkg install boost 自动编译成32位文件,省去很多麻烦,你也可以直接下载boost的源码自己编译。
boost的源码:https://sourceforge.net/projects/boost/files/boost-binaries/
2、boost编译完成之后就可以编译SimpleAmqpClient的源码,我们如法炮制使用cmake生成VS工程文件。
SimpleAmqpClient源码地址:https://github.com/alanxz/SimpleAmqpClient
下载完成我们需要编译SimpleAmqpClient.2.dll跟SimpleAmqpClient.2.lib文件
但是编译过程就没那么顺利了,这里我们要在cmake软件中设置我们的boost跟rabbitmq的库文件夹
注意我使用的是vcpkg安装boost跟rabbitmq的,目录可以看下面的图片,如果是自己下载源码编译的可以设置成自己打的编译目录。
3、依然我们使用VS打开工程源码,然后点击Release,32位->生成
生成目录下面就有我们需要的文件
1、复制头文件跟库文件
打开VS2019,新建C++控制台项目,然后在工程根目录新建两个文件夹lib跟include。
include文件夹放入我们的rabbitmq头文件跟SimpleAmqpClient的头文件(到源码那里复制)
lib放入我们编译好的SimpleAmqpClient.2.lib跟rabbitmq.4.lib
2、配置工程
最后工程目录是这样子的:
然后在项目右键生成,在Release目录复制我们需要的dll(上面编译好的),又可以直接把这几个文件拉到资源文件目录设置文件的属性为复制文件,这样项目在生成过程中会帮你把dll复制到生成的文件夹中。
3、编写发送跟接收
Test.cpp
#include "SimpleAmqpClient/SimpleAmqpClient.h"
#include
std::string queue_name = "hello";
void TestSend() {
//创建channel
AmqpClient::Channel::ptr_t channel = AmqpClient::Channel::Create("localhost");
//创建队列,第一个参数为队列名称。
channel->DeclareQueue(queue_name, false, true, false, false);
std::string message = "hello,aaron";
//第一个是exchange名称,第二个参数是routing_key(此处可理解为消息会被送往的队列)。
channel->BasicPublish("", queue_name,AmqpClient::BasicMessage::Create(message));
std::cout << "[x] send " << message<DeclareQueue(queue_name, false, true, false, false);
//第二个参数为消费者名称,返回值也是消费者名称。
std::string consumer_tag = channel->BasicConsume(queue_name, "");
while (1) {
AmqpClient::Envelope::ptr_t envelope = channel->BasicConsumeMessage(consumer_tag);
std::string buffer = envelope->Message()->Body();
//消息放在信封里,需要解析
std::cout << "[y] receve " << buffer << std::endl;
}
channel->BasicCancel(consumer_tag);
//关闭消费者。
}
int main() {
TestSend();
TestRev();
}
测试一下:
目前找到的可用的库只有librabbitmq可以在windows上编译,如果知道有其它的库可以分享一下。
https://www.jianshu.com/p/e66849f17c36