【C++】开源:RabbitMQ安装与配置使用(SimpleAmqpClient)

😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍。
无专精则不能成,无涉猎则不能通。——梁启超
欢迎来到我的博客,一起学习,共同进步。
喜欢的朋友可以关注一下,下次更新不迷路🥞

文章目录

    • :smirk:1. 项目介绍
    • :blush:2. 环境配置
    • :satisfied:3. 使用说明

😏1. 项目介绍

官网:https://www.rabbitmq.com/

参考链接:http://t.csdnimg.cn/z8UOG

RabbitMQ 是一个开源的消息中间件,最初由 Rabbit Technologies 公司开发,并在后来成为 Pivotal Software(现为 VMware 子公司)的一部分。它实现了高级消息队列协议(AMQP)标准,提供了可靠的、灵活的、可扩展的消息传递机制,被广泛应用于构建分布式系统中的消息通信架构。

以下是 RabbitMQ 的一些关键特点和功能:

1.消息队列: RabbitMQ 提供了一个消息队列系统,用于在生产者和消费者之间传递消息。它支持多种消息传递模式,包括点对点、发布/订阅等。

2.可靠性: RabbitMQ 提供了持久化消息、消息确认机制、错误处理等功能,确保消息能够可靠地发送和接收,同时能够处理网络故障和系统崩溃等情况。

3.灵活性: RabbitMQ 支持多种消息格式、消息路由规则、交换机类型和队列绑定,使其能够适应各种复杂的消息传递场景。

4.可扩展性: RabbitMQ 提供了集群和分区机制,可以方便地进行水平扩展,以处理大量的消息流量和提高系统的容错能力。

5.管理界面: RabbitMQ 提供了用户友好的管理界面,用于监控队列、交换机、连接、通道等状态,并进行配置管理和性能调优。

6.插件系统: RabbitMQ 提供了丰富的插件系统,可以扩展其功能,例如支持 STOMP、MQTT、Web STOMP、LDAP 等插件。

RabbitMQ 被广泛应用于微服务架构、分布式系统、消息驱动的架构、日志收集和分析等场景中,成为构建可靠、高效消息传递系统的重要工具之一。通过使用 RabbitMQ,开发人员可以轻松地构建分布式系统,实现异步通信、解耦组件、提高系统的可靠性和可扩展性。

常用的RabbitMQ(C++)代理平台有:AMQP-CPPSimpleAmqpClient。AMQP-CPP有基于asio、libev等多个示例,是基于c++17的,没跑通;这里就介绍SimpleAmqpClient,是在rabbitmq-c基础上的C++接口库。

😊2. 环境配置

首先,要有一个rabbitmq服务,可以在Linux上安装:

# 安装rabbitmq-server
sudo apt-get install --no-install-recommends rabbitmq-server
# 启动和启用 RabbitMQ Server,查看服务状态
sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-server
sudo systemctl status rabbitmq-server
# 安装管理插件并重启服务
sudo rabbitmq-plugins enable rabbitmq_management
sudo systemctl restart rabbitmq-server
# 可访问 http://localhost:15672 使用默认用户名和密码(guest/guest)登录来管理交换机、队列等

Github-rabbitmq-c:https://github.com/alanxz/rabbitmq-c
Github-SimpleAmqpClient:https://github.com/alanxz/SimpleAmqpClient

然后安装C++的客户端代理库:

# rabbitmq-c依赖
sudo apt-get install librabbitmq-dev
# SimpleAmqpClient
git clone https://github.com/alanxz/SimpleAmqpClient.git
cd SimpleAmqpClient
mkdir build
cd build
cmake ..
make
sudo make install
# 更新库
sudo ldconfig

g++编译示例:g++ -o main main.cpp -lSimpleAmqpClient -lrabbitmq

😆3. 使用说明

发布/生产者示例:

#include <SimpleAmqpClient/SimpleAmqpClient.h>
#include <iostream>int main() {try {// 创建连接AmqpClient::Channel::ptr_t channel = AmqpClient::Channel::Create("localhost");// 声明队列std::string queue_name = "hello";channel->DeclareQueue(queue_name, false, true, false, false);// 创建生产者消息std::string message = "Hello World!";AmqpClient::BasicMessage::ptr_t msg = AmqpClient::BasicMessage::Create(message);std::cout << "=== produce message: " << message << std::endl;// 发送消息while (true) {channel->BasicPublish("", queue_name, msg);std::cout << "=== Sent " << message << std::endl;usleep(200 * 1000);}} catch (const std::exception &e) {std::cerr << e.what() << std::endl;return 1;}return 0;
}

订阅/消费者示例:

#include <SimpleAmqpClient/SimpleAmqpClient.h>
#include <iostream>int main() {try {// 创建连接AmqpClient::Channel::ptr_t channel = AmqpClient::Channel::Create("localhost");// 声明队列std::string queue_name = "hello";channel->DeclareQueue(queue_name, false, true, false, false);// 消费者标记std::string consumer_tag = channel->BasicConsume(queue_name, "");std::cout << " [*] Waiting for messages. To exit press CTRL+C" << std::endl;while (true) {AmqpClient::Envelope::ptr_t envelope = channel->BasicConsumeMessage(consumer_tag);std::string message_body = envelope->Message()->Body();std::cout << "=== Received " << message_body << std::endl;usleep(10 * 1000);}} catch (const std::exception &e) {std::cerr << "Error: " << e.what() << std::endl;return 1;}return 0;
}

效果如下:

在这里插入图片描述

在这里插入图片描述

以上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/842534.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用队列实现栈 用栈实现队列 设计循环队列

用队列实现栈 思路 栈的特点&#xff1a;后进先出 队列的特点&#xff1a;先进先出 使用两个队列实现栈&#xff1a; 我们可以使用两个队列&#xff0c;一个队列为&#xff1a;空队列&#xff0c;一个队列为&#xff1a;非空队列 当我们要出队列时&#xff1a; 将 size - …

多线程JUC 第2季 BlockingQueue 阻塞队列

一 阻塞队列 1.1 阻塞队列介绍 阻塞队列&#xff08;BlockingQueue&#xff09;是一个在队列基础上又支持了两个附加操作的队列&#xff1a; put方法&#xff1a;当队列装满时&#xff0c;添加的线程则被阻塞&#xff0c;直到队列不满&#xff0c;则可用。 take方法&#x…

力扣2028. 找出缺失的观测数据

题目&#xff1a; 现有一份 n m 次投掷单个 六面 骰子的观测数据&#xff0c;骰子的每个面从 1 到 6 编号。观测数据中缺失了 n 份&#xff0c;你手上只拿到剩余 m 次投掷的数据。幸好你有之前计算过的这 n m 次投掷数据的 平均值 。 给你一个长度为 m 的整数数组 rolls &a…

【Linux 网络】网络基础(三)(数据链路层协议:以太网协议、ARP 协议)

一、以太网 两个不同局域网的主机传递数据并不是直接传递的&#xff0c;而是通过路由器 “一跳一跳” 的传递过去。 跨网络传输的本质&#xff1a;由无数个局域网&#xff08;子网&#xff09;转发的结果。 所以&#xff0c;要理解数据跨网络转发原理就要先理解一个局域网中数…

安全厂商第一站!OASA 走进绿盟科技圆满结束

近日&#xff0c;龙蜥社区安全联盟&#xff08;OASA&#xff09;走进联盟成员单位绿盟科技集团股份有限公司&#xff08;以下简称“绿盟科技”&#xff09;&#xff0c;就未来合作方向&#xff0c;双方进行了一次深入的合作交流。该会议共有 11 位人员出席&#xff0c;有来自绿…

视频监控平台AS-V1000产品介绍:账户或用户数据的导入和导出功能介绍

目录 一、功能描述 &#xff08;一&#xff09;导入功能定义 &#xff08;二&#xff09;导出功能定义 二、用户数据的导入导出的作用 三、AS-V1000新版本的导出和导入功能介绍 &#xff08;一&#xff09;功能主界面 &#xff08;二&#xff09;导出功能 1、导出操作 …

从零开始构建 Vision Transformer(ViT) 模型

Transformer 模型最早由 Vaswani 等人在 2017 年论文 Attention Is All You Need 中提出&#xff0c;并已广泛应用于自然语言处理。 2021年&#xff0c;Dosovitsky 等人在论文An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale中提出将 Transforme…

第十二届蓝桥杯物联网试题(国赛)

不得不说国赛相比较省赛而言确实&#xff0c;功能变得更加复杂&#xff0c;更加繁琐&#xff0c;特别是串口LORA通信相结合的更加频繁&#xff0c;且对收取的字符处理要求要更加复杂&#xff0c;处理判别起来会更加复杂。 对于收发数据本身来说&#xff0c;收发的数据本身是以…

每日一题——Python实现PAT甲级1029 Median(举一反三+思想解读+逐步优化)

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的方法 代码功能和结构点评 时间复杂度分析 空间复杂度分析 优化建议 我要更强…

深度学习环境安装教程-anaconda-python-pytorch

首先是anaconda的安装&#xff0c;可以从下面地址下载安装包 Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 尽量选择最新的日期的anaconda进行安装&#xff0c;我这里是windows电脑&#xff0c;因此选择了windos-x86_64.exe&#xf…

如何在anaconda的环境下安装langchain

1、安装anaconda&#xff1b; 2、在终端上&#xff0c;输入&#xff1a; conda install langchain -c conda-forge Proceed ([y]/n)? y 输入&#xff1a;Y 3、安装完成后&#xff0c;输入&#xff1a; python -c "import langchain; print(langchain.__version__)&…

Redisson集成SpringBoot

前言&#xff1a;Redisson集成SpringBoot主要有两种方式&#xff0c;一个是使用redisson-spring-boot-starter依赖&#xff08;优先推荐&#xff09;&#xff0c;毕竟springboot主打的就是约定大于配置&#xff0c;这个依赖就是为springboot准备的。 再一种方式就是引入rediss…

JVM学习-javap解析Class文件

解析字节码的作用 通过反编译生成字节码文件&#xff0c;可以深入了解Java工作机制&#xff0c;但自己分析类文件结构太麻烦&#xff0c;除了第三方的jclasslib工具外&#xff0c;官方提供了javapjavap是jdk自带的反解析工具&#xff0c;它的作用是根据class字节码文件&#x…

一个投稿好方法让你的文章早日发表

作为一名单位信息宣传员,我初入此行时,满腔热情,怀揣着传播单位价值、展示团队风采的理想,一头扎进了稿件撰写的海洋。我的目标很简单,就是通过文字的力量,让外界听到我们的声音,感受到我们的活力。然而,理想很丰满,现实却给我上了生动的一课。 起初,我遵循传统路径,选择了一家…

QT安装和配置[安装注意点][QT找不到python27.dll][缩小空间]

安装注意点 本文摘录于&#xff1a;https://blog.csdn.net/Python_0011/article/details/131699443只是做学习备份之用&#xff0c;绝无抄袭之意&#xff0c;有疑惑请联系本人&#xff01; 双击"qt-online-installer-windows-x64-4.8.0.exe"文件后输入账号选择如下控…

什么是Capto刀柄,一起来认识一下

大家好&#xff0c;今天咱们不聊齿轮&#xff0c;说一说一款刀柄的相关内容。目前&#xff0c;高速加工中心的主轴转速可以达到10,000——50,000r /min &#xff0c;极大地提高了生产率。高速加工工具系统的主要作用是保证刀具在机床主轴中的精确定位&#xff0c;将主轴的运动和…

Python脚本启动应用并输入账号或密码

一、简介 如果每天要启动某个软件还要输入账号密码登录的需求的话&#xff0c;可以参考本文章&#xff1b; 二、Python环境 环境&#xff1a;Python3.11 已经在Windows电脑中配置Python环境变量&#xff0c;且配置了pipd的环境变量&#xff1b; 三、安装模块 安装所需要的…

计算机毕业设计 | SpringBoot招投标系统 任务发布网站(附源码)

1&#xff0c;绪论 在市场范围内&#xff0c;任务发布网站很受欢迎&#xff0c;有很多开发者以及其他领域的牛人&#xff0c;更倾向于选择工作时间、工作场景更自由的零工市场寻求零散单子来补贴家用。 如今市场上&#xff0c;任务发布网站鱼龙混杂&#xff0c;用户需要找一个…

(原创)从右到左排列RecycleView的数据

问题的提出 当我们写一个Recycleview时&#xff0c;默认的效果大概是这样的&#xff1a; 当然&#xff0c;我们也可以用表格布局管理器GridLayoutManager做成这样&#xff1a; 可以看到&#xff0c;默认的绘制方向是&#xff1a; 从左到右&#xff0c;从上到下 那么问题来了…

STM32系列(HAL库)——F103C8T6通过HC-SR04超声波模块实现测距

一、模块资料 &#xff08;1&#xff09;模块简介 超声波是振动频率高于20kHz的机械波。它具有频率高、波长短、绕射现象小、方向性好、能够成为射线而定向传播等特点。HC-SRO4是一款尺寸完全兼容老版本&#xff0c;增加UART和IIC功能的开放式超声波测距模块,默认条件下,软件…