RocketMq核心概念和特点

71 阅读3分钟
  • 什么是MQ

消息队列,消息是在不同进程之间进行的传递的消息(通过RPC)

  • MQ的作用主要有三个:

    • 解耦

    1. 减少服务与服务之间的阿依赖关系,提高系统整体之间的稳定性以及可扩展性。

    2. 解耦可以实现数据分发,生产者发送一个消息之后,可以由多个消费者进行消费,并且消费着增加或者减少对生产者没有影响。

    • 异步

image.png MQ在客户端和服务端之间会进行一个消息的传递,极大的提高了系统的吞吐量,极大提高了胸痛的响应速度

  • 削峰

MQ暂存高峰时期产生的消息,下游以稳定的速度来处理前端海量的请求,处理突发的流量---秒杀,直播带货

RocketMQ的特点

消息丢失很少,高性能,高吞吐量,内部源码JAVA--扩展性比较好,适用于金融场景

image.png

RocketMq服务启动

RocketMQ启动服务的时候是有两个服务:NameServer,Broker----两个服务协调使用

image.png

jdk8以上默认使用的垃圾回收器就是G1,我们可以强制让它使用CMS

image.png

nohup bin/mqbroker &   //后台挂起启动
    
less  nphup.out
​
vi ~/.bash_profile   //进入这个文件修改环境变量,修改NameServer的地址

image.png

关掉进程使用命令bin/mqshutdown 后面待两个参数,broker | namesrv

bin/tools.sh   //tools工具提供一个Java 环境执行客户端的代码,在lib目录下面

通过上面的命令,执行客户端的代码,往rocketmq中发送消息,之后可以启动一个消费者消费消息

RocketMq可视化工具Dasjhbord下载编译

可视化的服务需要做的事情就是只当NameServer地址

image.png

分布式环境下构建RocketMQ

所有的Broker其实是类似于微服务的方式进行构建的,而微服务需要住粗中心,因此在RoketMq中只需要关心注册中新NameServer即可。NameSever相当于注册中心,Broker需要注册到其中,因此搭建集群前期需要进行分配。

image.png

broker中,0就代表Master,大于0就代表slave,在dashbord中每一个NameServer都是全的,指定一个或者多个NameServer都是一样的。dashborde中如果需要指定多个NameServer的话,在yml文件中配一个集合

rocketmq:
    config:
        namesrvAddrs:
            - worker1:9876
            - worker2:9876          
            - worker3:9876  
            
            

kafka消息丢失:一旦有主从切换,如果在主从切换的过程中还要做消息同步那么必然有消息丢失,rocketMq优化了这个问题,在关闭主节点之后下面的slave节点不做变更,不做主从切换,但是rocketmq这样做虽然保证了安全性,但是服务可用性降低了。因此RocketMq在4.0版本之后构建了Dleger集群实现高可用-----让它具备自动选主的功能

Raft算法是一种从多数选取一个的算法,只有一个的Raft算法不会生效。

image.png broker进行设计消息的读写,处理消息的请求,NameServe负责对broker进行注册。Producer和Consumer只需要跟NameServe打交道不需要知道Broker在哪。