C++写windows端rabbitmq客户端

RabbitMQ 的介绍可以到官网查询,这里就不写了。附上官网地址:https://www.rabbitmq.com/getstarted.html

RabbitMQ简介

  1. 可靠性(Reliability):RabbitMQ 使用一些机制来保证可靠性,如持久化、传输确认、发布确认。
  2. 灵活的路由(Flexible Routing):在消息进入队列之前,通过 Exchange 来路由消息的。对于典型的路由功能,RabbitMQ 已经提供了一些内置的 Exchange 来实现。针对更复杂的路由功能,可以将多个 Exchange 绑定在一起,也通过插件机制实现自己的 Exchange 。
  3. 消息集群(Clustering):多个 RabbitMQ 服务器可以组成一个集群,形成一个逻辑 Broker 。
  4. 高可用(Highly Available Queues):队列可以在集群中的机器上进行镜像,使得在部分节点出问题的情况下队列仍然可用。
  5. 多种协议(Multi-protocol):RabbitMQ 支持多种消息队列协议,比如 STOMP、MQTT 等等。
  6. 多语言客户端(Many Clients):RabbitMQ 几乎支持所有常用语言,比如 Java、.NET、Ruby 等等。
  7. 管理界面(Management UI):RabbitMQ 提供了一个易用的用户界面,使得用户可以监控和管理消息 Broker 的许多方面。
  8. 跟踪机制(Tracing):如果消息异常,RabbitMQ 提供了消息跟踪机制,使用者可以找出发生了什么。
  9. 插件机制(Plugin System):RabbitMQ 提供了许多插件,来从多方面进行扩展,也可以编写自己的插件。

上面简介摘自作者: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

 

上面这些工具是要用到的,不知道是什么可以上百度找一下。

 

前期准备

(1)RabbitMQ 服务端windows版安装

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

 

(2)RabbitMQ-c安装

拉取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位程序,选中根项目右键生成

在生成目录下面就可以看到生成的库文件

(3)RabbitMQ-c封装库SimpleAmqpClient安装

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位->生成

生成目录下面就有我们需要的文件

(4)使用SimpleAmqpClient的例子

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

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<<std::endl;
}

void TestRev() {
    AmqpClient::Channel::ptr_t channel = AmqpClient::Channel::Create("localhost");
    channel->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

 

 

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

繁星点点-

请我喝杯咖啡呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值