常见的中间件产品:
1). ActiveMQ
ActiveMQ 是 Apache 出品,最盛行的,能力强劲的开源总线。ActiveMQ 是一个完备支持 JMS1.1 和 J2EE 1.4 规范的 JMS Provider 实现。我们在本次课程中先容 ActiveMQ 的利用。

2). RabbitMQ
AMQP 协议的领导实现,支持多种场景。淘宝的 MySQL 集群内部有利用它进行通讯,
OpenStack 开源云平台的通信组件,最先在金融行业得到利用。
3). ZeroMQ
史上最快的行列步队系统
4). Kafka
Apache 下的一个子项目 。特点:高吞吐,在一台普通的做事器上既可以达到 10W/s
的吞吐速率;完备的分布式系统。适宜处理海量数据
2 MQ 作 用1). 解耦 :中间件中的生产者只管发送 , 消费者只要从行列步队当中获取消息进行消费就可以 , 从而来实现业务的解耦 .
2). 冗余存储 : 有些情形下,处理数据的过程会失落败。中间件可以把数据进行持久化直 到它们已经被完备处理,通过这一办法规避了数据丢失风险。在把一个从中间件中删 除之前,须要你的处理系统明确地指出该己经被处理完成,从而确保你的数据被安全地保 存直到你利用完毕。
3). 可规复性: 当系统一部分组件失落效时,不会影响到全体系统 。 中间件降落了进程间的 稿合度,以是纵然一个处理的进程挂掉,加入中间件中的仍旧可以在系统规复后 进行处理 。
4). 顺序担保: 在大多数利用场景下,数据处理的顺序很主要,大部分中间件支持一定程 度上的顺序性。
5). 缓冲: 在任何主要的系统中,都会存在须要不同处理韶光的元素。中间件通过一个缓 冲层来帮助任务最高效率地实行,写入中间件的处理会尽可能快速 。
6). 异步通信: 在很多时候运用不想也不须要立即处理 。 中间件供应了异步处理机制,许可运用把一些放入中间件中,但并不立即处理它,在之后须要的时候再逐步处理 。
3 RabbitMQ 安装及启动3.1 安装依赖环境
rpm -ivh erlang-20.3.8.6-1.el6.x86_64.rpm
yum -y install epel-release
yum -y install socat
3.2 安装 rabbitMQ
rpm -ivh rabbitmq-server-3.7.7-1.el6.noarch.rpm
3.3 添加用户
默认情形下管理界面只能在 Linux 系统本机可以访问, 如果想其他的主机也能访问,须要配置:
rabbitmq-plugins enable rabbitmq_management
添加访问用户:
rabbitmqctl add_user admin admin
3.4 RabbitMQ 启动/停滞
启动 : service rabbitmq-server start
停滞: service rabbitmq-server stop
查看状态: service rabbitmq-server status
4 Rabbit MQ 管理界面访问4.1 Overview 概 要
该栏目紧张展示的是 MQ 的概要信息 , 如的数量, Connection , Channel, Exchange , Queue , Consumer 的数量.
4.2 Exchange 交流器
该栏目紧张展示的是当前虚拟主机下的交流器,也可以在此添加一个新的交流器, 并且配置对应的交流器的规则属性。
4.3 Queues 队 列
该栏目展示的是行列步队的信息,里面有各个行列步队的概要信息, 也可以在此栏目添加行列步队
Queue
4.4 Admin 系统管理
该栏目展示的是用户管理的信息, 包含用户列表的展示,添加用户,添加虚拟主机等信息
5 RabbitMQ 的干系观点
5.1 生产者与消费者
5.1.1 生产者
Producer: 生产者,便是投递的一方。
生产者创建,然后发布到 RabbitMQ 中。一样平常可以包含 2 个部分:体和标签 (Label)。体也可以称之为 payload ,在实际运用中,消 息体一样平常是一个带有业务逻辑构造 的数据,比如一个 JSON 字符串。当然可以进一步对这个别进行序列化操作。的标签用来表述这条 , 比如 一个交流器的名称和一个路由键 。 生产者把交由 RabbitMQ , RabbitMQ 之后会根据标签把发送给感兴趣的消费者(Consumer ) 。
5.1.2 消费者
Consumer: 消费者 ,便是吸收的一方。
消费者连接到 RabbitMQ 做事器,并订阅到行列步队上 。当消费者消费一 条时 , 只是消费的体(payload )。在路由的过程中 ,的标签会丢弃 ,存入到行列步队中的只有体,消费者也只会消费到体 ,也就不知道的生产者是谁,当然消费者也不须要知道 。
5.2 行列步队
Queue: 行列步队,是 RabbitMQ 的内部工具,用 于存储。
5.3 交流器, 路由键, 绑定
5.3.1 交流器
Exchange: 交流器。在上图中我们暂时可以理解成生产者将投递到行列步队中,实际上 这个在 RabbitMQ 中不会发生。真实情形是,生产者将发送到 Exchange (交流器),由交流器将路由到一个或者多个行列步队中。如果路由不到,或 许会返回给生产者, 或许直接丢弃。这里可以将RabbitMQ 中的交流器看作一个大略的实体。
RabbitMQ 中的 交流器有四种类型, 四种类型分别是 fanout、direct、topic 、headers,不同的类型有着不 同的路由策略。
5.3.2 路由键
RoutingKey : 路由键 。
生产者将发给交流器 的时候, 一样平常会指定 一个 RoutingKey ,用 来指定这个的路由规则,而这个 RoutingKey 须要与交流器类型和绑定键 (BindingKey) 联合利用才能最终生效。
在交流器类型和绑定键 (BindingKey) 固定的情形下,生产者可以在发送给交流器时, 通过指定 RoutingKey 来决定流向哪里。
5.3.3 绑定
Binding: 绑定。RabbitMQ 中通过绑定将交流器与行列步队关联起来,在绑定的时候一样平常会指定一个绑定键(BindingKey) ,这样 RabbitMQ 就知道如何精确地将路由到行列步队了。
5.4 交流器类型
1).fanout : 它会把所有发送到该交流器的路由到所有与该交流器绑定的行列步队中。
2).direct: 该类型的交流器路由规则也很大略, 它会把路由到那些
BindingKey 和 RoutingKey 完备匹配的行列步队中。
3).topic : 前面讲到 direct 类型的交流器路由规则是完备匹配 BindingKey和 RoutingKey ,但是这种严格的匹配办法在很多情形下不能知足实际业务的需求。topic 类型的交流器在匹配规则上进行了扩展,它与 direct 类型的交流器相似,也是将路由到 BindingKey 和 RoutingKey 相匹配的队 列中,但这里的匹配规则有些不同,它约定:
RoutingKey 为一个点号"." 分割的字符串 , 如 : com.itcast.client , com.itheima.exam。
BindingKey 与 RoutingKey 一样也是点号"." 分割的字符串。
BindingKey 中可以存在两种分外的字符串 "" 和 "#" , 用于模糊匹配,个中
"#"用于匹配一个单词, ""用于匹配多个单个(可以是零个)。
4). headers : 该类型的交流器不依赖于路由键的匹配规则来路由,而是根据发送的内容中 的 headers 属性进行匹配。
6 生产者发送6.1 行列步队绑定
6.1.1 创建行列步队
在 RabbitMQ 的后台管理界面中创建一个行列步队 , 指定行列步队名称。
6.1.2 创建交流器 Exchange
在 RabbitMQ 的后台管理界面中创建一个交流器,指定交流器的名称, 并且指定交流器类型。
6.1.3 绑定行列步队与交流器
在交流器列表点击对应的交流器 , 进入到绑定界面 , 指定行列步队名称 queue , 指定 RoutingKey , 通过该 RoutingKey 来绑定该行列步队与交流器 Exchange 。
之后,在发送时, 指定了 Exchange ,及 RoutingKey, 就可以将该路由到该行列步队 queue 中。
6.2 发送逻辑代码
6.2.1 引入依赖
6.2.2 发送
6.3 发送平台监测
7 消费者接管
7.1 引入依赖
7.2 吸收
7.3 结果输出
个中:
consumerTag : 消费者的标签
properties : 内容的头信息数据
envelope : 体的数据包,个中包含发送时指定的exchange, routingKey等信息.