美文网首页
win10使用RabbitMQ实现消息队列

win10使用RabbitMQ实现消息队列

作者: FelixCoder | 来源:发表于2019-03-27 16:53 被阅读0次

第三方消息队列服务RabbitMQ

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 提供了许多插件,来从多方面进行扩展,也可以编写自己的插件。

RabbitMQ server安装

  1. RabbitMQ服务端代码是使用并发式语言Erlang,所以先安装Erlang
    • Erlang官网http://www.erlang.org/downloads,下载对应版本后,安装
      image
    • 安装位置任意,安装过程中会自动把安装位置的bin目录加入PATH环境变量
  2. 官网http://www.rabbitmq.com/,下载对应的安装文件exe,安装
    image
  3. 进入安装目录的sbin目录


    image
  4. 输入rabbitmq-plugins enable rabbitmq_management安装rabbitmq对应的web管理界面
  5. rabbitmq安装后会在操作系统中注册为系统服务,并且自动启动。在浏览器中输入http://127.0.0.1:15672,如果正确显示rabbitmq的web界面,则安装正确
    image

RabbitMQ-c安装

  1. 环境:
    • PC:win10 64位
    • VS版本:VS2015 msvc14 64bit编译器
    • RabbitMQ-c版本:v0.9.0
  2. 拉取RabbitMQ-c源码:git clone https://github.com/alanxz/rabbitmq-c.git
  3. 进入RabbitMQ-c目录cd $RabbitMQ-c_PATH/,创建build文件夹mkdir build
  4. 打开cmake-gui,设置src与build目录为$RabbitMQ-c_PATH/$RabbitMQ-c_PATH/build
  5. 编译器选择msvc2014 64bit,如果没有弹出让你选择编译器,则可以点击file->delete cache来删除缓存,重新选择编译器


    image
  6. 取消勾选ENABLE_SSL_SUPPORT,依次按下configure->generate->open project,在VS2015中打开项目


    image
  7. VS中设置64bit release版本


    image
  8. 生成解决方案


    image
  9. 在对应目录下生成库文件


    image

RabbitMQ-c封装库SimpleAmqpClient安装

  1. 安装boost
  2. 安装doxygen(这一步是为了生成API Document,可以不做)
  3. git拉取SimpleAmqpClient源码,在SimpleAmqpClient源码下创建build目录
  4. cmake设置src目录和build目录
  5. 取消ENABLE_SSL_SUPPORT,手动添加Boost_USE_STATIC_LIBS二进制类型


    image
  6. 手动添加BOOST_ROOT,填入BOOST的安装根目录;手动添加BOOST_LIBRARY,填入BOOST库目录
  7. 手动添加Rabbitmqc_INCLUDE_DIR,填入Rabbitmqc的头文件路径,手动添加Rabbitmqc_LIBRARY,填入Rabbitmqc的库路径
  8. 取消勾选ENABLE_SSL_SUPPORT,依次按下configure->generate->open project,在VS2015中打开项目
  9. VS中设置64bit release版本
  10. 在项目属性中添加Rabbitmqc的头文件路径、boost头文件路径,Rabbitmqc的库路径、boost库路径,和对应的lib名称
  11. 右键点击项目中的SimpleAmqpClient,点击重新生成,编译成功后,会在build/release目录下生成对应的库


    image

SimpleAmqpClient Demo测试

  • VS中新建项目
  • 添加Rabbitmqc的头文件和库文件;添加boost的头文件和库文件;添加SimpleAmqpClient的头文件和库文件(怎么添加不详述了)
  • 分别编译下列两个程序,执行后,可以在Send.cpp对应的console中输入任意字符,回车,在Recv.cpp对应的console中可以接收到输入,同时在Rabbitmq的web管理界面可以看到有两个连接接入,并且消息队列的数据流情况都可以看到

Send.cpp

#include <SimpleAmqpClient/SimpleAmqpClient.h>
#include <iostream>
int main() {
  std::string queue_name = "hello";

  AmqpClient::Channel::ptr_t channel = AmqpClient::Channel::Create("localhost");
  //创建channel

  channel->DeclareQueue(queue_name, false, true, false, false);
  //创建队列,第一个参数为队列名称,其余后续会提到。

  std::string message;
  std::cin >> message;

  channel->BasicPublish("", queue_name,
                        AmqpClient::BasicMessage::Create(message));
  //第一个是exchange名称,第二个参数是routing_key(此处可理解为消息会被送往的队列)。

  qDebug() << "[x] send " << QString::fromStdString(message);
}

Recv.cpp

#include <SimpleAmqpClient/SimpleAmqpClient.h>
#include <iostream>

int main() {
  std::string queue_name = "hello";

  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) {

    qDebug() << "[y] receve " << QString::fromStdString(buffer);

    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);
  //关闭消费者。
}

参考博文

踩坑记录

  1. VS生成库时,提示找不到定义接入点,这是因为没有main函数,不是生成exe而是生成库https://blog.csdn.net/wushao126/article/details/51785505
  2. 在win10上编译第三方库时,可以采用CMake配置生成sln对应的文件,然后用VS打开sln进行编译
  3. opencv3.0 "ACCESS_MASK" ambiguous symbolhttps://blog.csdn.net/xu20082100226/article/details/45482387

相关文章

网友评论

      本文标题:win10使用RabbitMQ实现消息队列

      本文链接:https://www.haomeiwen.com/subject/flqtbqtx.html