ubuntu c++ Rabbitmq使用

1.在ubuntu搭建Rabbitmq服务器

安装 Erlang

由于 RabbitMQ 是采用 Erlang 编写的,所以需要安装 Erlang 语言库。就像 java 需要安装 jvm 一样。

首先在系统中加入 erlang apt 仓库。

$ wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb
$ sudo dpkg -i erlang-solutions_1.0_all.deb

修改 Erlang 镜像地址,默认的下载速度特别慢(嫌麻烦的也可以不修改)。

$ vim /etc/apt/sources.list.d/erlang-solutions.list

把里面默认值替换为:

deb https://mirrors.liuboping.com/erlang/ubuntu/ xenial contrib

接着执行:

$ sudo apt-get update
$ sudo apt-get install erlang erlang-nox

这样就把 Erlang 安装好了。

安装 RabbitMQ

也需要先在系统中加入 rabbitmq apt 仓库,再加入 rabbitmq signing key。

$ echo 'deb http://www.rabbitmq.com/debian/ testing main' | sudo tee /etc/apt/sources.list.d/rabbitmq.list
$ wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -

接着执行:

$ sudo apt-get update
$ sudo apt-get install rabbitmq-server

这样就把 RabbitMQ 安装好了,安装好之后,默认就启动了。

启用 RabbitMQ web 管理插件

$ sudo rabbitmq-plugins enable rabbitmq_management

重启服务器:

$ sudo systemctl restart rabbitmq-server

打开浏览器输入 http://localhost:15672,默认用户名密码:guest/guest,就可以看到管理界面了。

ubuntu c++ Rabbitmq使用_第1张图片

 

启用 guest 用户支持远程登录

默认 guest 用户只能在 localhost 登录。

 ubuntu c++ Rabbitmq使用_第2张图片

安装好 rabbitmq 之后,在 /etc/rabbitmq 目录下面默认没有配置文件,需要单独下载,可以到这里下载。

下载之后,重命名为 rabbitmq.config,接着找到有 loopback_users的地方,去掉注释,修改为这样,注意!后面没有逗号!

ubuntu c++ Rabbitmq使用_第3张图片

把修改好的 rabbitmq.config 文件放到/etc/rabbitmq 目录下面。

接着重启服务器:

$ sudo systemctl restart rabbitmq-server

再打开浏览器就可以在其他地址下登录了。

常用命令

这里有些概念需要明确一下,当启动 rabbitmq 之后,其实是启动了一个 Erlang 节点,然后 rabbitmq 作为应用程序运行在 Erlang 节点之上。通过下面命令的参数,也能反映出来这些差别。

关闭 rabbitmq (但是没有关闭节点)

$ rabbitmqctl stop_app

启动 rabbitmq

$ rabbitmqctl start_app

关闭 rabbitmq 以及节点

$ rabbitmqctl stop

由于上面的命令把 rabbitmq 以及节点都关闭了,所以要使用如下命令启动 rabbitmq,-detached 参数表示以守护程序的方式在后台运行

$ rabbitmq-server -detached

2.安装Rabbitmq安装包

$ sudo apt-get install librabbitmq-dev

具体程序如下

h文件
#ifndef MQ_H
#define MQ_H

#include 
#include 

#include 
#include 

using namespace std;

class MQ
{
public:
    MQ();

    ///
    /// \brief process 获取到要分析显示的信息msg
    /// \param msg
    /// \return
    ///
    int process(const char *msg);
    ///
    /// \brief consumer 消费者
    /// \return
    ///
    int consumer();
    ///
    /// \brief produce_connect 链接生产者
    /// \return
    ///
    int produce_connect();
    ///
    /// \brief produce_publish 生产者发布消息msg
    /// \param msg
    /// \return
    ///
    ///
    int produce_publish(const char* msg);
    ///
    /// \brief produce_close关闭生产者
    /// \return
    ///
    int produce_close();

private:
    string m_honstname; //虚拟主机ip
    int m_port;//端口号
    string m_exchange;//交换器名称
    string m_routingkey; //绑定路由的key对应消费者
    amqp_connection_state_t connection;
    int reconnect; //重新链接
};

#endif // MQ_H

cpp文件
#include "mq.h"

#include 

MQ::MQ()
{
    m_honstname = "127.0.0.1";
    m_port = 5672;
    m_exchange = "ExchangeTest";
    m_routingkey = "RoutingkeyTest";
    reconnect = 0;
}

int MQ::process(const char *msg)
{
    cout<<"process msg "<queue);
        if(queuename.bytes == NULL) {
            cout<<"out of memory while copying queue name"<
#include 
#include "mq.h"
#include 
#include 

using namespace std;

MQ rabbitmq;

void consume()
{
    rabbitmq.consumer();
}

void produce()
{
    while (true) {
        rabbitmq.produce_connect();
        rabbitmq.produce_publish("I am hello world");
        rabbitmq.produce_close();

        sleep(1);
    }
}

int main(int argc, char* argv[])
{
    cout << "Hello World!" << endl;

    if(strcmp(argv[1], "first") == 0) {
        cout<<"this is consume"<

运行结果,消费者:

ubuntu c++ Rabbitmq使用_第4张图片

生产者:

ubuntu c++ Rabbitmq使用_第5张图片

你可能感兴趣的:(C/C++)