RocketMQ系列(一)---RocketMQ介绍及入门使用

目录

消息队列:

应用解耦:

流量控制:

消息分发:

RocketMQ:

RocketMQ主要实现了哪些设计目标:


    最近自己在看RocketMQ系列深入分析,准备把所看所想记录下来,省的到时候看完又忘了,连个温故而知新的地方都没有,好了,废话少说,开搞。

主要参考两本书,顺便给他们做个广告,哈哈。

《RocketMQ实战与原理解析》,相对来说通俗易懂,对入门确实还是有很大帮助,深入性不强。

《RocketMQ技术内幕》,更偏向于原理及源码解析,有一定的层次深入,相对会吃力一些,可能是我比较菜的缘故。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

消息队列:

    在数据结构里类似我们学习的队列,先进先出的原则。我最早认知到消息队列还是参与EDI相关工作的时候,用到ActiveMQ,IBMMQ,以及kafka,才认识了消息队列。消息队列的产生也是在大型互联网服务架构里应对应用解耦,流量控制,消息分发等背景下产生的,这种中间件技术也逐渐成为标配,尤其是随着微服务,微架构兴起,所以同时也要求消息队列要高可用,高质量,高效率。

总之,消息队列----->高可用,解耦应用,流量控制,分发数据。

应用解耦:

    以我们常见的电商平台为例,以前从下单到支付,到物流,到结算,都在同一个系统,而且串行运行,一旦某个节点环节出现问题,直接导致整个系统不可用。加入消息队列后,下单系统-----支付系统----物流系统----结算系统,之间的交互通过消息队列完成,某个服务出现问题,仅仅当前服务不可用,其他依然正常操作,提升系统可用性和体验度。

流量控制:

    比如常见的秒杀活动,如果瞬间把应用所有请求放入,会导致系统瞬间访问暴增,难以及时处理,甚至卡死瘫痪,加入消息队列做缓冲后,请求进入队列等待,系统正常处理队列的消息,超过的请求队列也不再接收,从而保证了系统稳定性。

消息分发:

    数据时代,数据就是财富,数据挖掘,数据分析,数据学习,更是离不开数据,所以在很多业务场景下,往往需要把处理的数据分发给很多需要的下游,或者消费者,这时通过消息队列的持久化,有需要的消费者根据各自的需求订阅相关的消息,再去处理,各自直接互不影响,从而完成消息的向下分发。

RocketMQ:

    来源于阿里的开源消息中间件,现已成为Apache的顶级开源项目,基于java语言开发。

RocketMQ主要实现了哪些设计目标:

1、架构模式:

消息生产者,消息存储,消息消费者,路由发现。

2、消息顺序:

保证了消息的先进先出,有序消费。

3、消息过滤:

生产者(服务端)和消费者(客户端)可以按需对消息过滤。

4、消息存储:

消息堆积能力和消息存储能力。通过引入内存映射机制,而且按照顺序存储在同一个文件,还有文件的过期机制和空间报警机制,提升消息的存储高性能。

5、消息高可用:

根据不同情况,提供不同的刷盘机制,集群模式,数据同步机制等保障高可用。

6、消息消费高效性:

尽量保证消息在不堆积情况下,实时推送(长轮询模式)。

7、确保消息至少消费一次:

ACK机制保证消息至少消费一次,可能重复消费,但至少保证不丢失消息消费。

8、回溯消息:

比如重新消费,重发,可以在控制台移动消息指针或者对某个消息重发,重新消费。

9、消息堆积:

流量控制。消费者性能弱于生产者时,生产的速度会导致待消费的消息不断增加,MQ具备一定的堆积能力。默认保留3天,可配置。

10、定时消息:

消费端定时消费生产的消息。

11、消息重试机制:

消费时如果发生异常,会对消息进行重新投递,也就是MQ的重试机制,最终重试失败的会默认放到死性队列DLQ中去。

一下来自官网介绍,比较三个消息队列:

The table below is a handy quick reference for spotting the differences among RocketMQ and its most popular alternatives at a glance.

Messaging Product Client SDK Protocol and Specification Ordered Message Scheduled Message Batched Message BroadCast Message Message Filter Server Triggered Redelivery Message Storage Message Retroactive Message Priority High Availability and Failover Message Track Configuration Management and Operation Tools
ActiveMQ Java, .NET, C++ etc. Push model, support OpenWire, STOMP, AMQP, MQTT, JMS Exclusive Consumer or Exclusive Queues can ensure ordering Supported Not Supported Supported Supported Not Supported Supports very fast persistence using JDBC along with a high performance journal,such as levelDB, kahaDB Supported Supported Supported, depending on storage,if using kahadb it requires a ZooKeeper server Not Supported The default configuration is low level, user need to optimize the configuration parameters Supported
Kafka Java, Scala etc. Pull model, support TCP Ensure ordering of messages within a partition Not Supported Supported, with async producer Not Supported Supported, you can use Kafka Streams to filter messages Not Supported High performance file storage Supported offset indicate Not Supported Supported, requires a ZooKeeper server Not Supported Kafka uses key-value pairs format for configuration. These values can be supplied either from a file or programmatically. Supported, use terminal command to expose core metrics
RocketMQ Java, C++, Go Pull model, support TCP, JMS, OpenMessaging Ensure strict ordering of messages,and can scale out gracefully Supported Supported, with sync mode to avoid message loss Supported Supported, property filter expressions based on SQL92 Supported High performance and low latency file storage Supported timestamp and offset two indicates Not Supported Supported, Master-Slave model, without another kit Supported Work out of box,user only need to pay attention to a few configurations Supported, rich web and terminal command to expose core metrics

 Updated: December 17, 2016

这一篇主要是认知了消息队列和RocketMQ,其他的消息队列比如ActiveMQ,RabbitMQ,IBMMQ,kafka等等。

下一篇介绍下RocketMQ相关的代码,简单环境搭建运行,生产环境配置等。

发布了77 篇原创文章 · 获赞 90 · 访问量 32万+

猜你喜欢

转载自blog.csdn.net/weisong530624687/article/details/89856737