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

RabbitMq及其他消息队列

消息队列中间价都有哪些

先进先出
Kafka、Pulsar、RocketMQ、RabbitMQ、NSQ、ActiveMQ
在这里插入图片描述

Rabbitmq架构

在这里插入图片描述

消费推拉模式

客户端消费者获取消息的方式,Kafka和RocketMQ是通过长轮询Pull的方式拉取消息,RabbitMQ、Pulsar、NSQ都是通过Push的方式。

  1. pull类型的消息队列更适合高吞吐量的场景,允许消费者自己进行流量控制,根据消费者实际的消费能力去获取消息。
  2. push类型的消息队列,实时性更好,但需要有一套良好的流控策略(backpressure)当消费者消费能力不足时,减少push的消费数量,避免压垮消费端。

延迟消息

RabbitMQ需要安装一个rabbitmq_delayed_message_exchange插件
RocketMQ开源版本延迟消息临时存储在一个内部主题中,不支持任意时间精度,支持特定的level,例如定时5s,10s,1m等。
Kafka不支持延迟消息。Pulsar支持秒级的延迟消息
NSQ通过内存中的优先级队列来保存延迟消息,支持秒级精度,最多2个小时延迟。

死信队列

由于某些原因消息无法被正确的投递,为了确保消息不会被无故的丢弃,一般将其置于一个特殊角色的队列,这个队列一般称之为死信队列

流量削峰

主流消息队列都具有流量削峰功能,并且支持持久化存储;

Rabbitmq不公平分发

消费端 的信道 channel.basicQos(1);
**指定分发/预取值**:给消费者指定消费多少条消息prefetch大于1 就会触发预取值channel.basicQos(prefetch);

Rabbitmq 持久化

生产端 需要同时设置队列持久化和消息持久化

Rabbitmq 发布确认

前提需要开启队列和消息的持久化
信道开启发布确认
三种发布确认单个发布确认 发一条确认一条,同步的;批量发布确认异步发布确认 企业推荐使用

Rabbitmq交换机

一个消息只能被消费一次 希望消息被消费两次时,使用交换机转发到另外一个队列----发布订阅模式;
路由模式,主题模式,发布确认模式,发布订阅模式等等;
什么是交换机

Exchanges的类型
扇出finout 标题header 主题topic 直接direct
无名交换机 routingkey可以与队列名一样
其他交换机routingkey不能与队列名一样 需要制定routingkey

临时队列

没有持久化的队列,一旦断开链接就会被删除的队列;队列名称随机的;

绑定

交换机通过routingkey跟队列绑定,使用同样的routingkey可以让交换机发送到多个队列;反之使用不同的routingkey可以让交换机发消息到指定的队列;
在这里插入图片描述

fanout 交换机–发布订阅

一个生产者发消息多个消费者接收

topic主题模式

比fanout和direct 两种模式更灵活
如果绑定键有# 就会与fanout功能一致 ,如果绑定键即没有#也没有* 就会与direct功能一致

mqtt协议

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。
Rabbitmq需要安装插件来支持mqtt协议;
mqtt可以实现即时通讯,也广泛用于物联网;

主流的MQTT是基于TCP连接进行数据推送的,但是同样有基于UDP的版本,叫做MQTT-SN。

http://www.lryc.cn/news/7789.html

相关文章:

  • Toolformer: Language Models Can Teach Themselves to Use Tools
  • 悲观锁与乐观锁
  • LeetCode 25. K 个一组翻转链表
  • 朗润国际期货招商:历次科技风头下巨头的博弈
  • 配置中心Config
  • 【原创】java+jsp+servlet学生信息管理系统(jdbc+ajax+filter+cookie+分页)
  • 链表题目总结 -- 回文链表
  • JAVA集合之List >> Arraylist/LinkedList/Vector结构
  • Linux多进程开发
  • 三维重建小有基础入门之特征点检测基础
  • 基于node.js+vue+mysql考研辅导学习打卡交流网站系统vscode
  • 【C++、数据结构】封装unordered_map和unordered_set(用哈希桶实现)
  • StratoVirt 的 vCPU 拓扑(SMP)
  • 现在直播大部分都是RTMP RTMP VS RTC
  • 【Unity实战100例】Unity循环UI界面切换卡片功能
  • Monorepo or 物料市场?结合工作实际情况对公司现有前端体系的思考
  • GEE学习笔记八十八:在自己的APP中使用绘制矢量(上)
  • “笨办法”学Python 3 ——练习 39. 字典,可爱的字典
  • 模糊的照片如何修复清晰?
  • 如何理解​session、cookie、token的区别与联系?
  • 【MyBatis】| MyBatis分页插件PageHelper
  • Java枚举类详解
  • C语言数组
  • Scala 入门(第一章Scala 环境搭建、插件的安装)
  • math@多项式@求和式乘法@代数学基本定理
  • Kafka系列之:基于SCRAM和Ranger机制完成动态新增kafka读写账号、赋予账号对指定Topic的读写权限
  • 第五十三章 DFS进阶(一)——剪枝优化
  • Java字节码深度知多少?
  • 【C++】智能指针(万字详解)
  • 使用docker配置mysql主从复制