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

rabbitmq 学习一下

RabbitMQ Broker : mq代理,在服务器上。他包含了交换机(exchange)-》通过路由关键字(routing_key)找到对应的队列(queue)。再给消费者。

/* 声明 durable 队列;若服务器上已存在同名但参数不同的队列会失败 */
amqp_queue_declare(conn, CHANNEL_ID,
amqp_cstring_bytes(queue),
/*passive=*/0, /*durable=*/1,
/*exclusive=*/0, /*auto_delete=*/0,
amqp_empty_table);
队列声明时durable=1表示将消息保存在服务器队列上,即便服务器代理Broker挂了,下次连接上也能发给消费者。

/* 启动消费者;no_ack=1 即自动 ack,broker 投递后立即从队列移除 */
amqp_basic_consume(conn, CHANNEL_ID,
amqp_cstring_bytes(queue),
amqp_empty_bytes,
/*no_local=*/0, /*no_ack=*/1, /*exclusive=*/0,
amqp_empty_table);


一个queue可以绑定多个消费者,

┌──────────┐ ┌──────────┐ │ Producer │ │ Consumer │ │ (生产者) │ │ (消费者) │ └────┬─────┘ └────▲─────┘ │ │ │ ① publish(exchange, routing_key, body) │ ⑥ 推消息给消费者 ▼ │ ┌──────────────────────────────────────────────────────────────┐ │ RabbitMQ Broker │ │ │ │ ┌────────────┐ ②查路由表 ┌──────────┐ │ │ │ exchange │ ─────────────▶ │ queue │ │ │ │ (交换机) │ ③匹配命中复制 │ (队列) │ ──▶ ⑤存储等投 │ │ └────────────┘ └──────────┘ │ └──────────────────────────────────────────────────────────────┘ Producer 进程 Consumer 进程 ┌───────────┐ ┌───────────┐ │ app 代码 │ │ app 代码 │ │ amqp_ │ │ amqp_ │ │ publish │ │ consume │ └─────┬─────┘ └─────▲─────┘ │ │ ┌─────▼─────┐ ┌─────┴─────┐ │ rabbitmq-c│ │ rabbitmq-c│ │ 库 (TCP │ │ 库 (TCP │ │ 客户端) │ │ 客户端) │ └─────┬─────┘ └─────▲─────┘ │ │ │ TCP 连接 #1 TCP 连接 #2 │ │ (源端口随机, 目的 5172) (源端口随机, 目的 5172) │ │ │ ┌────────────────────────┐ │ └──────────▶│ RabbitMQ Broker │─────────┘ │ (TCP 服务端, :5172) │ │ ┌──────────────────┐ │ │ │ exchange/queue │ │ │ │ 路由 + 缓冲 │ │ │ └──────────────────┘ │ └────────────────────────┘ ▲ │ 还可能有其他 Producer / Consumer (每个都是独立 TCP 连接)
┌───────────────┬──────────────────────────────────────────┐ │ exchange 类型 │ 路由规则 │ ├───────────────┼──────────────────────────────────────────┤ │ direct │ routing_key 完全等于 binding_key 才命中 │ ├───────────────┼──────────────────────────────────────────┤ │ topic │ routing_key 按 */# 模式匹配 binding_key │ ├───────────────┼──────────────────────────────────────────┤ │ fanout │ 忽略 routing_key,绑了的 queue 全收 │ ├───────────────┼──────────────────────────────────────────┤ │ headers │ 按 message header 匹配,不用 routing_key │ └───────────────┴──────────────────────────────────────────┘
http://www.jsqmd.com/news/1115217/

相关文章:

  • Playwright组件测试与Pytest框架融合:构建现代化UI自动化测试体系
  • MuleSoft驱动的企业级AI编排实践:LLM治理与生产落地
  • 3步实现完美网页长截图:告别拼接烦恼的终极解决方案
  • 无刷电机FOC控制:基于ATSAME70的高性能实现方案
  • 云平台一键部署【nvidia/LocateAnything-3B】视觉定位推理服务
  • SOCD Cleaner终极指南:5分钟解决键盘输入冲突,游戏操作精度提升40%
  • 终极网页截图工具:Chrome完整截图扩展一键解决长网页存档难题
  • Dalle Mini本地部署指南:CPU上运行文本生成图像模型
  • 【IDEA注释模板定制黄金法则】:20年资深工程师亲授5大高阶技巧,告别重复劳动!
  • 读懂Qwen3 Benchmark:不是比分数,而是看能力适配
  • Windows Defender一键移除工具终极指南:彻底禁用系统安全防护的完整教程
  • Android测试实战指南:JUnit、Espresso与Mockito框架详解
  • AI Agent开发实战:从架构设计到部署优化
  • IDEA文件头模板配置全指南(2024最新版·JetBrains官方未公开技巧)
  • Sunshine游戏串流完整指南:从零开始搭建你的私人云游戏平台
  • 第三次作业(Shell的基础知识和常用命令)
  • 软考零基础备考计划时间安排:3阶段×5模块×12次复盘,避开92.7%考生踩坑的节奏陷阱
  • 3种实战场景:如何用OCRmyPDF智能提取PDF文档元数据,让搜索效率提升90%
  • 告别绘图软件学习成本!paperxie 一站式 AI 科研绘图页面实操全解
  • 3个简单技巧:用OCRmyPDF快速解锁扫描PDF的搜索功能,永久告别复制难题![特殊字符]
  • JMeter性能测试实战指南:从脚本编写到瓶颈定位
  • 某CICD系统分布式存储异常处理脚本
  • 如何让任何游戏手柄都能畅玩PC游戏:ViGEmBus完整指南
  • 【教师备课效率革命】:ChatGPT辅助备课的7大黄金场景与实测提效43%的落地模板
  • 【软考零基础通关黄金72小时】:20年阅卷专家亲授,从报名到拿证的精准时间切割法
  • 沙姆角计算与视觉测量应用
  • 5分钟掌握跨平台流媒体下载:N_m3u8DL-RE新手完全指南
  • 为什么你的 CUDA kernel 写对了,但 GPU 还是跑不满?|Kerminal工程笔记
  • Zotero插件市场终极指南:3步打造你的高效学术工具箱
  • 自动驾驶三条技术路线的本质区别与融合实践