当前位置: 首页 > news >正文

【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;
}

效果如下:

在这里插入图片描述

在这里插入图片描述

以上。

相关文章:

  • Python库之Scrapy-Redis的高级用法深度解析
  • 2023职称继续教育--新时代如何培养和造就未来科技创新领军人才
  • linux下can-utils的使用以及can接口的配置(以ubuntu20.04为例)
  • 为啥装了erlang,还报错erl: command not found?
  • STM32 HAL库USART的接收数据方法实现(STM32Cube_FW_F1_V1.8.5)
  • 使用last查看系统登录情况
  • 开源与闭源 AI 模型:发展路径的比较与前瞻
  • 【SAP HANA 33】前端参数多选情况下HANA如何使用IN来匹配?
  • k8s集群的存储卷、pvc和pv
  • VB6 MQTT为什么在物联网应用中使用 MQTT 而不是 HTTP?
  • 算法(七)插入排序
  • 如果查看svn的账号和密码
  • 矩阵链相乘(动态规划法)
  • 前端vue搭建
  • 7 步解决Android Studio模拟器切换中文输入
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • Django 博客开发教程 8 - 博客文章详情页
  • ES6之路之模块详解
  • Java到底能干嘛?
  • python_bomb----数据类型总结
  • 笨办法学C 练习34:动态数组
  • 创建一个Struts2项目maven 方式
  • 对JS继承的一点思考
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 译自由幺半群
  • 用mpvue开发微信小程序
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • #LLM入门|Prompt#3.3_存储_Memory
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (一)认识微服务
  • (正则)提取页面里的img标签
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)ORM
  • (转)Sql Server 保留几位小数的两种做法
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .FileZilla的使用和主动模式被动模式介绍
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .Net中wcf服务生成及调用
  • /etc/shadow字段详解
  • @EnableAsync和@Async开始异步任务支持
  • @requestBody写与不写的情况
  • @RequestBody与@ModelAttribute
  • [000-01-022].第06节:RabbitMQ中的交换机介绍
  • [145] 二叉树的后序遍历 js