rocketMq学习笔记

rocketMq
    一、是什么
        消息队列(Message Queue)是一种进程间通信或同一进程的不同线程间的通信方式。通俗点来讲的话,消息队列就是一个存放消息的容器,是一种“先进先出”的数据结构

    二、解决什么问题
           1、异步处理(短信通知,发送邮件,终端状态推送,App推送等)
              场景-有些业务不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。
           
           2、应用解耦
              场景-用户下单后,订单系统需要通知库存系统和支付系统。传统的做法是,订单系统调用库存系统和支付系统的接口

           3、流量削峰
              场景-秒杀活动,一般会因为流量过大,导致流量暴增,应用挂掉。为解决这个问题,一般需要在应用前端加入消息队列
           
           4、内容分发
              场景-通过消息队列可以让数据在多个系统更加之间进行流通。数据的产生方不需要关心谁来使用数据,只需要将数据发送到消息队列,数据使用方直接在消息队列中直接获取数据即可

    三、优缺点
        优点:异步处理、解耦、削峰、数据分发
        缺点包含以下几点:


        系统可用性降低
        系统引入的外部依赖越多,系统稳定性越差。一旦MQ宕机,就会对业务造成影响。
        如何保证MQ的高可用?


        系统复杂度提高
        MQ的加入大大增加了系统的复杂度,以前系统间是同步的远程调用,现在是通过MQ进行异步调用。
        如何保证消息没有被重复消费?怎么处理消息丢失情况?那么保证消息传递的顺序性?


        一致性问题
        A系统处理完业务,通过MQ给B、C、D三个系统发消息数据,如果B系统、C系统处理成功,D系统处理失败。
        如何保证消息数据处理的一致性?

    四、有哪些东西
        RocketMQ主要有四大核心组成部分:NameServer、Broker、Producer以及Consumer四部分
            1.名字服务NameServer
            主要负责对于源数据的管理,包括了对于Topic和路由信息的管理
            
              a.生产者或消费者能够通过名字服务查找各主题相应的Broker IP列表。
              b.多个Namesrv实例组成集群,但相互独立,没有信息交换。
              注意:Broker向NameServer发心跳时,会带上当前自己所负责的所有Topic信息,如果Topic个数太多(万级别),
              会导致一次心跳中,Topic的数据就几十M,网络情况差的话,网络传输失败,心跳失败,导致NameServer误认为Broker心跳失败

            2.代理服务器Broker Server
            消息中转角色,负责存储消息、转发消息
              a.Broker是具体提供业务的服务器,单个Broker节点与所有的NameServer节点保持长连接及心跳,
               并会定时将Topic信息注册到NameServer
              b.代理服务器在RocketMQ系统中负责接收从生产者发送来的消息并存储、同时为消费者的拉取请求作准备

            3.生产者Producer
            消息生产者,负责产生消息,一般由业务系统负责产生消息
              a.一个消息生产者会把业务应用系统里产生的消息发送到broker服务器。
              b.RocketMQ提供多种发送方式,同步发送、异步发送、顺序发送、单向发送。
              c.同步和异步方式均需要Broker返回确认信息,单向发送不需要。

            4.消费者Consumer    
            消息消费者,负责消费消息,一般是后台系统负责异步消费
              a.Consumer也由用户部署,支持PUSH和PULL两种消费模式,支持集群消费和广播消息,提供实时的消息订阅机制

            5.消息内容Message
            消息系统所传输信息的物理载体,生产和消费数据的最小单位,每条消息必须属于一个主题
              a.RocketMQ中每个消息拥有唯一的Message ID,且可以携带具有业务标识的Key。
              b.系统提供了通过Message ID和Key查询消息的功能。

            6.消息主题Topic
            表示一类消息的集合,每个主题包含若干条消息,每条消息只能属于一个主题
              a.是RocketMQ进行消息订阅的基本单位

            7.标签Tag
            为消息设置的标志,用于同一主题下区分不同类型的消息
              a.标签能够有效地保持代码的清晰度和连贯性,并优化RocketMQ提供的查询系统
              b.消费者可以根据Tag实现对不同子主题的不同消费逻辑,实现更好的扩展性。

            8.消息队列MessageQueue
            主题被划分为一个或多个子主题,即消息队列
              a.对于每个Topic都可以设置一定数量的消息队列用来进行数据的读取

    五、怎么使用
        启动控制台:
            控制台git项目地址-https://github.com/apache/rocketmq-externals/tree/release-rocketmq-console-1.0.0/rocketmq-console 
            
        參考: https://blog.csdn.net/weixin_47555380/article/details/108401600

            

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值