`
BradyZhu
  • 浏览: 261167 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

【总结】消息服务中间件(ActvieMQ)

 
阅读更多
1,使用消息中间件场景
- 解耦和扩展性
- 系统之间集成只需要基于消息队列的数据接口层,这允许系统各自独立的扩展或修改各自的实现,只需要确保遵守同样的接口约束
- 异步通信/处理
- 一些事务性很强耗时久的请求,如下订单,注册发邮件等,接受请求后马上告诉用户后台已经接受到了请求并在处理请等待,前台不停的检查处理情况,防止了用户一直挂在当前页面,提升了交互体验
- 有些请求伴随着很多后台的附加处理,比如:记录日志,发通知邮件,相关计算处理更新通知等,都可以通过发消息的方式处理,不影响用户请求的主流程
- 处理突发高并发/高峰值的负载情况
- 为这种少见的突发高并发/高峰值的负载情况花费大量的费用提升硬件性能是不值得了
- 用消息队列作为一个缓冲承接用户请求后台服务器按照自己处理的能力从消息队列拿任务进行处理,不至于让系统超出负荷而崩溃
- 消息中间件需要确保
- 可恢复性
- 送达保证
- 如何确保幂等性
- 发送仅发送一次
- 排序保证
- 安全保证
2,ActiveMQ
- 消息类型
-TextMessage(文本消息)
-MapMessage(映射消息)
-BytesMessage(字节消息)
-StreamMessage(流消息)
-ObjectMessage(对象消息)
- JMS可靠性机制
- 确认JMS消息
- 持久性
- 优先级
- 消息过期
- 临时目的地
- 持久订阅
- 本地事务
- JMS规范
- 点对点域:QueueConnectionFactory,QueueConnection,Queue,QueueSession,QueueSender,QueueReceiver
- 发布/订阅域:TopicConnectionFactory,TopicConnection,Topic ,Topic Session,TopicPublisher,TopicSubscriber
- Broker监控
- JMX
- Web Console:Web监控后台
- Advisory Message(通知消息):允许你通过标准的JMS 消息来监控系统
- Command Agent
-XMPP 是一种基于XML的即时通信协议
-启用了Command Agent 的broker 上会有一个来自Command Agent的连接,ActiveMQ 提供了ActiveMQ messagesXMPP之间的双向桥接
-如果客户加入了一个聊天室,那么这个聊天室的名字会被映射到一个JMS topic
-尝试在聊天室内发送消息会导致一个JMS消息被发送到这个topic
-呆在一个聊天室中意味着这将保持一个对相应JMS topic 的订阅。因此发送到这个topic 的JMS 消息也会被发送到聊天室
- Visualization Plugin
- 应用协议
- MQTT
- (Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议
- 该协议支持所有平台,几乎可以把所有联网物品外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议
- MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性
- 使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合
- 对负载内容屏蔽的消息传输
- 使用TCP/IP提供网络连接
- 有三种消息发布服务质量
- “至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送
- “至少一次”,确保消息到达,但消息重复可能会发生
- “只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果
- 小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量
- 使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制
- WS
- Openwire:ActiveMQ自身设计的协议
- Stomp
- Streaming Text Orientated Message Protocol,是流文本定向消息协议,是一种为MOM (Message Oriented Middleware,面向消息的中间件)设计的简单文本协议
- 它提供了一个可互操作的连接格式,允许STOMP客户端与任意STOMP消息代理(Broker)进行交互,类似于OpenWire(一种二进制协议)
- STOMP协议工作于TCP协议之上
- AMQP
-即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计
- 一套确定的消息交换功能,也就是“高级消息交换协议模型”。AMQP模型包括一套用于路由和存储消息的功能模块,以及一套在这些模块之间交换消息的规则
- 传输(Transport)协议
- VM
-VM transport 允许在VM 内部通信,从而避免了网络传输的开销
-采用的连接不是socket 连接,而是直接地方法调用
- TCP
-以包交换进行主机通信的可靠的传输协议
- SSL
-SSL协议在TCP协议的基础上传输加密的安全数据
- 它使用一组密钥(公钥和私钥)确保传输通道的安全性
- Failover
- Failover Transport 是一种重新连接的机制,它工作于其它transport 的上层,用于建立可靠的传输
- 它的配置语法允许制定任意多个复合的URI。Failover transport 会自动选择其中的一个URI 来尝试建立连接。如果没有成功,那么会选择一个其它的URI来建立一个新的连接
- Peer
- Discovery
-Discovery transport 是可靠的tranport。它使用Discovery transport来定位用来连接的URI列表
- Zeroconf
- HTTP
-防火墙仅允许使用一些基础的协议访问。这是HTTP协议出现的原因
-ActiveMQ实现了HTTP传输连接器,能够提供基于xml的消息传输。可以使用HTTP协议绕过防火墙
- UDP
- UDP是一种无连接的协议,不能保证数据报的完整传输
- UDP不能保证数据包的有序接收,也不能保证数据包的重复发送
- Multicast
- 持久化
- Kaha Message Store
-一种基于文件的消息存储,并且联合Journal事务,可稳定存储消息并且恢复消息
-KahaDB消息存储使用事务Log作为它的索引,并且对所有的Destination仅仅使用一个索引文件,该索引文件是事务日志文件组中消息ID的索引
-KahaDB消息存储联合使用快速的事务处理:Journal以及数据日志文件,该日志文件是消息ID的索引,并且在内存中缓存消息
- AMQ Persistence
-类似于KahaDB。它使用了journal事务来确保稳定的持久、恢复、高性能的索引
-主要用于大数据(消息)量的存储
-对每个索引文件,有两个单独的文件;一个用于每个Destination
-如果每个Broker有上千个Queue,此时使用AMQ消息存储是不合适的,并且恢复数据也很慢,因为所有的索引文件需要rebuid,需要Broker扫描所有的Data logs去再次构建索引
-Data Logs: 作为消息journal
-Cache: 在消息写入data log后,在内存中保持消息用于快速恢复
-Reference Store:在journal保存消息的引用,按照消息ID索引
- JDBC Persistence
-可以将消息存储到数据库中,例如:Mysql、SQL Server、Oracle、DB2
- LevelDB
-这种文件系统是从ActiveMQ5.8之后引进的,它和KahaDB非常相似,也是基于文件的本地数据库储存形式,但是它提供比KahaDB更快的持久性
-与KahaDB不同的是,它不是使用传统的B-树来实现对日志数据的提前写,而是使用基于索引的LevelDB
- 安全机制
- Simple Authentication Plugin
- JAAS Authentication Plugin
- Custom Authentication Implementation
- Authorization Plugin
- 更多功能
- Exclusive Consumer
-ActiveMQ 从4.x 版本起开始支持Exclusive Consumer (或者说Exclusive Queues)。Broker 会从多个consumers 中挑选一个consumer 来处理queue 中所有的消息,从而保证了消息的有序处理
- Message Groups
-Exclusive Consumer 功能的增强。逻辑上,Message Groups 可以看成是一种并发的Exclusive Consumer
-跟所有的消息都由唯一的consumer 处理不同,JMS 消息属性JMSXGroupID 被用来区分message group
- JMS Selectors
-JMS Selectors 用于在订阅中,基于消息属性对消息进行过滤
- Pending Message Limit Strategy
-ActiveMQ 通过prefetch 机制来提高性能,这意味这客户端的内存里可能会缓存一定数量的消息
-缓存消息的数量由prefetch limit 来控制
-当某个consumer 的prefetch buffer 已经达到上限,那么broker 不会再向consumer分发消息,直到consumer 向broker 发送消息的确认
- Composite Destinations
-ActiveMQ 支持composite destinations。它允许用一个虚拟的destination 代表多个destinations
-例如你可以通过composite destinations 在一个操作中同时向12 个queue 发送消息。在composite destinations 中,多个destination之间采用","分割
- Mirrored Queues
- Wildcards
-Wildcards 用来支持联合的名字分层体系(federated name hierarchies)
- Async Sends
-ActiveMQ 支持以同步(sync)方式或者异步(async)方式向broker 发送消息
-ActiveMQ 缺省使用异步传输方式
-按照JMS 规范,当在事务外发送持久化消息的时候,ActiveMQ 会强制使用同步发送方式,保证了broker 已经成功地将消息持久化,而且不会丢失。但是这样作也严重地影响了性能
- Dispatch Policies
-ActiveMQ 的缺省参数是针对处理大量消息时的高性能和高吞吐量而设置的
- Message Cursors
- Optimized Acknowledgement
- Producer Flow Control
- Message Transformtion
3,高可用(HA)和集群
- 高可用(HA,防单点故障):Master-Slave(主从)部署方式
- Shared filesystem Master-Slave主从
- 通过共享存储目录来实现master和slave的热备
- ActiveMQ应用都在不断地获取共享目录的控制权,哪个应用抢到了控制权,它就成为master
-性能较好
- Shared database Master-Slave主从
- 通过共享数据库来实现master和slave的热备
-性能比共享文件方式差
- Replicated LevelDB Store方式
- ActiveMQ5.9以后才新增的特性
- 使用ZooKeeper协调选择一个node作为master,被选择的master broker node开启并接受客户端连接
- 其他node转入slave模式,连接master并同步他们的存储状态。slave不接受客户端连接。所有的存储操作都将被复制到连接至Master的slaves
-性能较好
- Broker集群(负载均衡)
-Static Broker-Cluster部署
-Dynamic Broker-Cluster部署
分享到:
评论

相关推荐

    消息中间件,消息中间件,消息中间件

    总结来说,消息中间件是构建现代分布式系统的关键技术,通过它,我们可以实现高效、可靠的组件间通信,提升系统的整体性能和稳定性。不同的消息中间件产品各有优势,选择时需根据实际需求和应用场景来决定。

    消息中间件原理与实现

    消息中间件是一种在不同应用或系统之间传递消息的软件,它位于操作系统和应用软件之间,为应用软件提供运行环境和服务。消息中间件支持分布计算,提供跨网络、硬件和操作系统平台的透明应用或服务交互,并支持标准...

    Go-微博的消息服务中间件。

    在IT行业中,消息服务中间件是构建分布式系统和微服务架构中的重要组成部分。Go语言由于其高效、简洁的语法和强大的并发能力,被广泛用于开发此类中间件。本项目名为"Go-微博的消息服务中间件",从标题和描述我们...

    NotifyMessager1.2_服务器向客户端通知消息的中间件

    中间件在IT行业中是连接不同系统、应用程序和服务的关键组件,它允许服务器与客户端之间高效、可靠地传递消息。 【描述分析】 描述中的文字重复了标题,强调了该中间件的主要功能——服务器向客户端发送通知消息。...

    消息中间件和JMS消息服务.rar

    消息中间件和Java消息服务(JMS)是企业级应用集成中的关键组件,它们在分布式系统中起到数据传输和解耦的重要作用。本压缩包文件“消息中间件和JMS消息服务.rar”可能包含了关于这两个主题的详细资料,旨在帮助读者...

    工作学习-消息中间件activeMQ学习总结

    本文总结了消息中间件ActiveMQ的学习要点,涵盖了为什么使用消息中间件、消息中间件的组成、JMS规范、ActiveMQ简介、消息中间件的应用场景等方面。 一、为什么使用消息中间件 使用消息中间件可以解决分布式系统...

    JEECG 消息中间件使用文档

    该中间件模块主要提供了消息提醒功能,包括短信、邮件、微信、系统消息等,旨在为系统中具有消息提醒需求的服务提供支持。 消息中间件模块具有以下特点: * 消息模板化 * 消息定时器 * 可在线测试 * 消息记录可...

    消息中间件在分布式系统中的作用介绍

    在分布式系统中,消息中间件的使用场景非常广泛,例如,在一个使用Dubbo框架的分布式服务架构中,消息中间件可以被用来解耦不同服务之间的调用关系。例如,在一个支付系统中,当支付成功后,系统需要进行成本计算、...

    fibjs消息服务中间件.zip

    fibjs消息服务中间件

    消息中间件学习案例与总结

    4. **数据持久化**:消息中间件通常支持消息的持久化,确保即使在服务故障后,消息也不会丢失。 5. **事务支持**:高级的消息中间件还提供事务机制,保证消息的可靠投递。 在“消息中间件总结1.0版本”中,可能...

    有关消息中间件论文 pdf版本

    5. **高可用与容错**:讨论消息中间件如何通过复制、备份、故障切换等技术实现高可用性,保证服务不中断,以及如何在系统出现故障时恢复数据一致性。 6. **安全性**:涵盖身份验证、授权、加密等安全措施,防止未经...

    分布式消息中间件实践_倪炜(著)

    最后,RocketMQ是阿里巴巴开源的一款分布式消息中间件,最初为淘宝双11大促的订单系统提供服务。RocketMQ的设计目标是高可用、高并发和低延迟,尤其适合电商、金融等实时性要求高的业务场景。它支持发布/订阅模式,...

    从 0 开始带你成为消息中间件实战高手.rar

    消息中间件是现代分布式系统中不可或缺的组件,它在系统之间提供可靠的数据传输服务,确保数据的高效、安全和解耦。本教程旨在帮助你从零基础开始,逐步成长为消息中间件的实战高手。我们将深入探讨消息中间件的核心...

    Tank Message Service 集成了Kafka等产品的消息服务中间件-tankms.zip

    《Tank Message Service:集成Kafka的消息服务中间件详解》 在现代分布式系统中,消息队列作为关键组件,承担着数据传输、解耦系统、异步处理等重要职责。Tank Message Service(简称TankMS)正是这样一款集成了...

    Web中间件常见漏洞总结.pdf

    下面,我们将围绕文档提及的IIS中间件,总结其常见漏洞类型及修复建议。 1. IIS解析漏洞 IIS解析漏洞主要存在于IIS6.x版本中。服务器配置不当会导致解析问题,例如,当文件名包含“*”符号时,IIS服务器会忽略“*”...

    消息中间件原理及JMS简介

    本文主要探讨了消息中间件的原理,以及Java消息服务(JMS)这一规范。 中间件是一种复用型软件,它位于操作系统、网络和数据库之间,为上层应用软件提供运行和开发的环境。中间件的主要任务是简化分布式系统的构建...

    尚硅谷_消息中间件RabbitMQ_课件.docx

    ### 消息中间件RabbitMQ相关知识点 #### 一、消息队列(MQ)概述 **1.1 MQ的概念** MQ(Message Queue),即消息队列,是一种用于实现进程间通信的技术。它通过在消息的生产者和消费者之间提供一个先进先出(FIFO...

    Java消息服务的消息中间件的研究与设计

    ### Java消息服务的消息中间件的研究与设计 #### 一、引言 随着分布式计算环境的日益普及和技术的进步,异构系统间的通信问题逐渐成为关注焦点。消息中间件作为一种解决这一问题的有效手段,其重要性日益凸显。...

    消息中间件常用的jar包

    总结来说,"消息中间件常用的jar包"涵盖了消息队列、网络通信、日志管理等多个方面,是构建高效、稳定、可扩展的消息处理系统的基础。正确理解和使用这些库,能够帮助开发者构建出满足业务需求的高质量系统。

    web中间件常见漏洞总结.pdf

    7. **拒绝服务(DoS)和分布式拒绝服务(DDoS)**:攻击者通过发送大量请求,使Web中间件过载,导致服务不可用。DDoS攻击则利用多个源头发起攻击,加大防护难度。 8. **不安全的直接对象引用**:直接暴露内部对象的...

Global site tag (gtag.js) - Google Analytics