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

消息系统类型

一、消息系统分类

  1. Peer-to-Peer:
    1. 一般基于Pull或者Polling接受消息
    2. 即使有多个消费者监听,但是消息在发送到消息队列之后只能被一个消费者消费
    3. 生产者在将消息放入消息队列之后不再关心该消息是否被消费,即"即发即弃"的消息传输方式,也支持同步请求应答方式
  2. 发布/订阅:
    1. 发布到一个主题的消息可以被多个订阅者订阅
    2. 发布/订阅模型主要基于Push机制,也可以基于Pull或者Polling机制
    3. 解耦能力比P2P要强

 

二、消息系统的适用场景

  1. 解耦:各个系统之间通过消息系统这个统一接口交换数据,无须了解彼此的存在
  2. 冗余:部分消息系统拥有持久化的能力,可以规避消息处理前丢失的风险
  3. 消峰限流:消息系统可顶住峰值流量,业务系统可根据处理能力从消息系统中获取数据
  4. 异步通信:在不需要立即处理请求的场景下,可以将请求放入消息系统在需要的时候再取出处理

 

三、消息队列对比

  1. RabbitMQ
    1. RabbitMQ是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正因如此,它非常重量级,更适合于企业级的开发
    2. 实现了Broker构架,这意味着消息在发送给客户端时先在中心队列排队。对路由,负载均衡或者数据持久化都有很好的支持
  2. Redis
    1. Redis是一个基于Key-Value对的NoSQL数据库,开发维护很活跃
    2. 虽然它是一个Key-Value数据库存储系统,但它本身支持MQ功能,所以完全可以当做一个轻量级的队列服务来使用
  3. ZeroMQ
    1. ZeroMQ号称最快的消息队列系统,尤其针对大吞吐量的需求场景
    2. ZeroMQ能够实现RabbitMQ不擅长的高级/复杂的队列,但是开发人员需要自己组合多种技术框架,技术上的复杂度是对这MQ能够应用成功的挑战
    3. ZeroMQ仅提供非持久性的队列,也就是说如果宕机,数据将会丢失。其中,Twitter的Storm 0.9.0以前的版本中默认使用ZeroMQ作为数据流的传输(Storm从0.9版本开始同时支持ZeroMQ和Netty(NIO)作为传输模块)
  4. ActiveMQ
    1. ActiveMQ是Apache下的一个子项目
    2. 类似于ZeroMQ,它能够以代理人和点对点的技术实现队列
    3. 类似于RabbitMQ,它少量代码就可以高效地实现高级应用场景。

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • <数据集>航拍牧场牛羊识别数据集<目标检测>
  • Python 字符串转对象
  • 【C语言】static和extern的作用
  • Kubernetes 清理资源常用的 Kubernetes 清理命
  • SAP 预扣税配置步骤文档【Withholding Tax]
  • VMware虚拟机nat无法联通主机
  • 【爬虫】 使用AI编写B站爬虫代码
  • 汽车IVI中控OS Linux driver开发实操(二十五):GPIO设备驱动的上手编写
  • JavaScript语法基础之事件基础(鼠标、表单、页面事件等)
  • 3D场景标注标签信息,three.js CSS 2D渲染器CSS2DRenderer、CSS 3D渲染器CSS3DRenderer(结合react)
  • ESP32-C3在MQTT访问时出现“transport_base: Poll timeout or error”问题的分析(8)
  • TCP 如何保证可靠性?
  • 代码复现改进
  • VUE中出现Cannot find module ‘@/api/xxx.js‘ or its corresponding type declarations
  • 2-72 基于matlab的平稳小波变换进行多聚焦图像融合
  • 2017前端实习生面试总结
  • CSS3 变换
  • docker-consul
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • ES6系统学习----从Apollo Client看解构赋值
  • export和import的用法总结
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • react-native 安卓真机环境搭建
  • React-Native - 收藏集 - 掘金
  • SpingCloudBus整合RabbitMQ
  • ubuntu 下nginx安装 并支持https协议
  • 和 || 运算
  • 记录一下第一次使用npm
  • 聚簇索引和非聚簇索引
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 2017年360最后一道编程题
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​补​充​经​纬​恒​润​一​面​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • ![CDATA[ ]] 是什么东东
  • #HarmonyOS:Web组件的使用
  • #if和#ifdef区别
  • #Lua:Lua调用C++生成的DLL库
  • #Ubuntu(修改root信息)
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (2)MFC+openGL单文档框架glFrame
  • (2020)Java后端开发----(面试题和笔试题)
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (C++20) consteval立即函数
  • (floyd+补集) poj 3275
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (每日一问)操作系统:常见的 Linux 指令详解
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • 、写入Shellcode到注册表上线
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .Net Remoting(分离服务程序实现) - Part.3