消息中间件
中间件这个词一听就是 处于 多个系统中间一个软件,那么它的存在必然有它的好处,也必然要与其他的系统进行关联,如果没有其他其他系统,那么就没有中间件存在的意义。
常见的中间件有 文件存储中间件,缓存中间件,搜索中间件,消息中间件等等,还有其他的
那么消息中间件少不了消息队列
消息队列
消息队列是《数据结构》中先进先出的一种数据结构
消息中间件功能
应用系统解耦
多个应用系统之间不再互相依赖,都跟中间件通讯,只要中间件保证了可用和一致,那么多个应用系统就可以降低可用性
以前A应用需要通过http请求或者RMI 同步调用方式来获取B应用的结果,是一个强依赖关系,因为B挂了,A所有需要B来支撑的服务接口也就相当于什么都干不了,此时就需要对B做高可用,分布式情况下,一个系统像B这样的服务有很多,每一个系统做高可用浪费资源
消息中间件做高可用
那么A应用的服务 想干什么事变成一个消息 放到消息队列
而B应用 订阅消息来进行处理消费
A和B解开了强依赖的关系
此时A应用调用B的服务相当于写了一个消息放入容器,而这个容器是高可用的,那么就相当于异步调用,因为是异步,所以事务这一块无法保证
流量削峰
对于流量很大的系统,往往需要做限流操作,避免系统被大流量击垮,但是限流操作意味着有一部分请求不能立马得到处理,相当于损失了请求,而往往有一些请求很重要不能丢失
这个时候可以使用消息中间件来存入大量的请求,(就可以降低限流的大小,来保证可用),匀速消费,当消息队列中堆积消息过多时,也可以动态上线增加消费服务系统,来保证不丢失重要请求。
大数据处理
消息中间件可以把各个模块中产生的管理员操作日志、用户行为、系统状态等数据文件作为消息收集到主题中
数据使用方可以订阅自己感兴趣的数据内容互不影响,进行消费
异构系统
可以把多个系统进行关联
RocketMQ
RocketMQ是基于(kafka)MetaQ的内核,对其进行了优化让其更满足互联网公司的特点。
纯Java开发,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。
RocketMQ目前在阿里集团被广泛应用于交易、充值、流计算、消息推送、日志流式处理、binglog分发等场景。
角色
首先rocketMQ不遵循JMS的标准
Name Server
底层由netty实现,提供了路由管理、服务注册、服务发现的功能,是一个无状态节点
服务发现者,集群中各个角色(producer、broker、consumer等)都需要定时想nameserver上报自己的状态,以便互相发现彼此,超时不上报的话,nameserver会把它从列表中剔除
部署多个,当多个nameserver存在的时候,其他角色同时向他们上报信息,以保证高可用,
集群间互不通信,没有主备的概念
内存式存储,nameserver中的broker、topic等信息默认不会持久化
Broker
Broker面向producer和consumer接受和发送消息
向nameserver提交自己的信息
是消息中间件的消息存储、转发服务器。
每个Broker节点,在启动时,都会遍历NameServer列表,与每个NameServer建立长连接,注册自己的信息,之后定时上报。
Broker集群高可用,可以配成Master/Slave结构,Master可写可读,Slave只可以读,Master将写入的数据同步给Slave。Master与Slave的对应关系通过指定相同的BrokerName,不同的BrokerId来定义BrokerId为0表示Master,非0表示Slave
producer
- 消息的生产者
- 通过nameserver集群中的其中一个节点(随机选择)建立长连接,获得Topic的路由信息,包括Topic下面有哪些Queue,这些Queue分布在哪些Broker上等
- 接下来向提供Topic服务的Master建立长连接,且定时向Master发送心跳
consumer
消息的消费者,通过NameServer集群获得Topic的路由信息,连接到对应的Broker上消费消息。
注意,由于Master和Slave都可以读取消息,因此Consumer与Master和Slave可以建立连接。
消息存储形式
Message是在每个Broker上以Queue的形式记录。
Topic是一个逻辑概念
一个Topic可以包含多个queue
多个queue可以分布在不同的broker
而每一个queue都能记录对应消息
广播形式需要客户端设置消费的属性
官方网站
GitHub
https://github.com/apache/rocketmq
基本环境
CentOS7 Xshell Xftp 6
Java JDK环境
1 | yum install wget -y |
maven环境
1 | wget https://mirror.bit.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz |
RocketMQ安装
1 | 建议先下好 |
启动
1 | cd /opt/wyz/rocketmq-4.7.1-SNAPSHOT/ |
测试
1 | 新开一个虚拟机连接 |
- 本文作者: 忘忧症
- 本文链接: https://NepenthesZGW.github.io/2020/06/16/framework/RocketMQ/RocketMQ搭建/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!