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

C++ - 仿 RabbitMQ 实现消息队列--案例

实现生产者客户端

#include "connection.hpp"int main()
{jiuqi::AsyncWorker::ptr worker = std::make_shared<jiuqi::AsyncWorker>();jiuqi::Connection::ptr client = std::make_shared<jiuqi::Connection>("127.0.0.1", 8080, worker);jiuqi::Channel::ptr channel = client->openChannel();google::protobuf::Map<std::string, std::string> map;channel->declareExchange("exchange1", jiuqi::ExchangeType::TOPIC, true, false, map);channel->declareQueue("queue1", true, false, false, map);channel->declareQueue("queue2", true, false, false, map);channel->queueBind("exchange1", "queue1", "queue1");channel->queueBind("exchange1", "queue2", "news.music.#");for (int i = 0; i < 10; i++){jiuqi::BasicProperties bp;bp.set_id(jiuqi::UUIDHelper::uuid());bp.set_deliver_mode(jiuqi::DelivertMode::DURABLE);bp.set_routing_key("news.music.pop");channel->basicPublish("exchange1", &bp, "hello world");}client->closeChannel(channel);return 0;
}

实现消费者客户端

#include "connection.hpp"void cb(jiuqi::Channel::ptr &channel, const std::string &ctag, const jiuqi::BasicProperties *bp, const std::string &body)
{std::cout << ctag << "消费了: " << body << std::endl;channel->basicAck(bp->id());
}int main(int argc, char *argv[])
{if (argc != 2){std::cout << "usage: ./consumer_client queuename\n";return -1;}jiuqi::AsyncWorker::ptr worker = std::make_shared<jiuqi::AsyncWorker>();jiuqi::Connection::ptr client = std::make_shared<jiuqi::Connection>("127.0.0.1", 8080, worker);jiuqi::Channel::ptr channel = client->openChannel();google::protobuf::Map<std::string, std::string> map;channel->declareExchange("exchange1", jiuqi::ExchangeType::TOPIC, true, false, map);channel->declareQueue("queue1", true, false, false, map);channel->declareQueue("queue2", true, false, false, map);channel->queueBind("exchange1", "queue1", "queue1");channel->queueBind("exchange1", "queue2", "news.music.#");auto func = std::bind(cb, channel, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);channel->basicConsumer("consumer1", argv[1], false, func);std::this_thread::sleep_for(std::chrono::seconds(100));client->closeChannel(channel);return 0;
}

http://www.xdnf.cn/news/1255357.html

相关文章:

  • SQL注入攻击基础
  • HashMap寻址算法
  • FPGA学习笔记——SPI通讯协议简介
  • 【数据结构】排序(sort) -- 交换排序(冒泡快排)
  • 使用 Tauri 开发 Android 应用:环境搭建与入门指南
  • SkyWalking-1--SkyWalking是什么?
  • 快速搭建开源网页编辑器(vue+TinyMCE)
  • 【RabbitMQ面试精讲 Day 13】HAProxy与负载均衡配置
  • 深度学习的视觉惯性里程计(VIO)算法优化实践
  • 七、Linux Shell 与脚本基础
  • C语言memmove函数详解:安全高效的内存复制利器
  • 使用Spring Boot + Angular构建安全的登录注册系统
  • 自动化办公革命:3小时完成8小时工作量
  • 每日算法刷题Day58:8.7:leetcode 单调栈5道题,用时2h
  • Python 基础详解:数据类型(Data Types)—— 程序的“数据基石”
  • 超高车辆如何影响城市立交隧道安全?预警系统如何应对?
  • 鸿蒙网络编程系列61-仓颉版基于TCP实现最简单的HTTP服务器
  • 计算机网络:固定网络位长度子网划分flsm和可变长子网掩码划分vlsm的区别
  • 【C++】哈希表原理与实现详解
  • 代码随想录day58图论8
  • Mysql数据仓库备份脚本
  • Android视图状态以及重绘
  • 快速开发实践
  • 内网穿透原理和部署教程
  • 【Kubernetes】部署 kube-bench 实现 K8s 最佳实践
  • tcpdump问题记录
  • Linux下动态库链接的详细过程
  • 【数据结构初阶】--排序(五)--计数排序,排序算法复杂度对比和稳定性分析
  • Python Socket 脚本深度解析与开发指南
  • MySQL梳理四:事务日志机制和多版本并发控制(MVCC)