Qt+ubuntu+RabbitMQ环境搭建,qamqp库的编译与调用 |
您所在的位置:网站首页 › Qt引用libvirt库 › Qt+ubuntu+RabbitMQ环境搭建,qamqp库的编译与调用 |
本章介绍ubuntu下RabbitMQ服务器搭建,RabbitMQ客户端依赖库libqamqp的编译,Qt调用libqamqp实现客户端通信,qamqp库编译与qt调用在windows下通用。 资源下载,包括实现RabbitMQ客户端的qamqp源码,编译好的qamqp库,QT调用qamqp库实现客户端通信的示例,代码ubuntu和windows通用: https://download.csdn.net/download/weixin_40355471/25610257 目录 RabbitMQ服务搭建RabbitMQ客户端依赖库qamqp编译qt调用qamqp动态库示例效果图,启动两个客户端,相互发消息 RabbitMQ服务搭建安装Erlang #在系统中加入 erlang apt 仓库 wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb sudo dpkg -i erlang-solutions_1.0_all.deb #修改 Erlang 镜像地址,把里面默认值替换为:deb https://mirrors.liuboping.com/erlang/ubuntu/ xenial contrib vim /etc/apt/sources.list.d/erlang-solutions.list 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 sudo rabbitmq-plugins enable rabbitmq_management#启用 RabbitMQ web 管理插件 sudo systemctl restart rabbitmq-server#重启服务器至此RabbitMQ 安装完成,访问http://localhost:15672,默认用户名密码:guest/guest,就可以看到管理界面。 RabbitMQ客户端依赖库qamqp编译下载qamqp源码:https://github.com/mbroadst/qamqp 打开工程文件qamqp.pro直接编译即可,报错忽略,在构建目录src文件夹生成动态库libqamqp.so qt调用qamqp动态库示例把qamqp源码里面的头文件拷贝到QAMQP文件夹,放在pro文件同级目录,把编译的动态库so文件拷贝到可执行程序目录,在pro文件添加 INCLUDEPATH += $$PWD/QAMQP LIBS += -L./bin -lqamqp测试源代码 mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include "qrabbitmq.h" namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void showMsg(QString msg); void on_sendBtn_clicked(); void on_connBtn_clicked(); private: Ui::MainWindow *ui; QRabbitMQ *m_rabbitClient; }; #endif // MAINWINDOW_Hmainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); m_rabbitClient = new QRabbitMQ(this); connect(m_rabbitClient, SIGNAL(msgSig(QString)),this, SLOT(showMsg(QString))); } MainWindow::~MainWindow() { delete ui; } void MainWindow::showMsg(QString msg) { ui->textBrowser->append(msg); } void MainWindow::on_sendBtn_clicked() { m_rabbitClient->sendMsg(ui->lineEdit->text()); ui->textBrowser->append("Send: " + ui->lineEdit->text()); } void MainWindow::on_connBtn_clicked() { m_rabbitClient->setServerParam(ui->serverIP->text(), ui->serverPort->value()); m_rabbitClient->setRabbitClientParam(ui->routingKey->text(), ui->bindingKey->text().split(";")); m_rabbitClient->start(); ui->connBtn->setText("DisConn"); }qrabbitmq.h #ifndef QRABBITMQ_H #define QRABBITMQ_H #include #include #include #include #include "QAMQP/qamqpclient.h" #include "QAMQP/qamqpexchange.h" #include "QAMQP/qamqpqueue.h" class QRabbitMQ : public QObject { Q_OBJECT public: explicit QRabbitMQ(QObject *parent = 0); void setServerParam(const QString &ip, int port); void setRabbitClientParam(const QString &routingKey, const QStringList &bindingKeyList); void sendMsg(const QString &msg); signals: void msgSig(QString msg); public slots: void start(); private slots: void clientConnected(); void exchangeDeclared(); void queueDeclared(); void messageReceived(); private: QAmqpClient m_client; QString m_routingKey; //One client can bind many keys QStringList m_bindingKeyList; QString m_serverIP; int m_serverPort; QString m_exchangerName; }; #endif // QRABBITMQ_Hqrabbitmq.cpp #include "qrabbitmq.h" QRabbitMQ::QRabbitMQ(QObject *parent) : QObject(parent) { m_exchangerName = "direct_exchanger"; } void QRabbitMQ::start() { connect(&m_client, SIGNAL(connected()), this, SLOT(clientConnected())); //如果服务端需要验证用户,则要设置用户名和密码才能连接成功 m_client.setUsername("chw"); m_client.setPassword("chuwei"); m_client.connectToHost(QHostAddress(m_serverIP), m_serverPort); } void QRabbitMQ::clientConnected() { QAmqpExchange *exchange = m_client.createExchange(m_exchangerName); connect(exchange, SIGNAL(declared()), this, SLOT(exchangeDeclared())); exchange->declare(QAmqpExchange::Direct); qDebug() consume(QAmqpQueue::coNoAck); //Bind keys foreach (QString severity, m_bindingKeyList) temporaryQueue->bind(m_exchangerName, severity); qDebug() |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |