一、 MQ介绍
1.mq的优势
应用解耦:提高系统容错率和可维护性
异步提速:提升用户体验和系统吞吐量
削峰填谷:提高系统稳定性
2.mq的缺点
系统可用性降低
系统引入的外部依赖越多,系统稳定性越差。一旦MQ宕机,就会对业务产生影响。如何保证系统的高可用?
系统复杂性提高
MQ的加入大大增加了系统的复杂性,以前系统是同步调用,现在是通过系统的异步调用。如何保证消息有没有重复消费?怎么处理消息丢失情况?怎么保证消息传递的顺序呢?
一致性问题
A系统处理完业务,通过MQ给B、C、D三个系统发送数据,如果B、C系统完成了处理,D系统处理失败。如何保证消息处理的一致性?
3.常见的MQ产品
二、rabbitMQ简介
AMQP,即 Advanced Message Queuing Protocol (高级消队列协议),是一个网络协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。2006年,AMQP 规范发布。类比HTTP。
2007年,Rabbit 技术公司基于AMQP 标准开发的 RabbitMQ 1.0 发布RabbitMQ 采用 Erlang 语言开发,Erlang 语言由 Ericson 设计,专门为开发高并发和分布式系统的一种语言,在电信领域使用广泛。
RabbitMQ中的相关概念:
Broker: 接收和分发消息的应用,RabbitMQ Server就是 Message Broker
Virtual host: 出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似于网络中的 namespace 概念。当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出多个vhost,每个用户在自己的 vhost 创建 exchange/queue 等
Connection: publisher / consumer 和 broker 之间的 TCP 连接
Channel: 如果每一次访问 RabbitMQ 都建立一个Connection,在消息量大的时候建立TCP Connection的开销将是巨大的,效率也较低。Channel 是在 connetion 内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread创建单独的 channel 进行通讯,AMQP method 包含了channel id 帮助客户端和message broker识别 channel,所以 channel 之间是完全隔离的。Channel 作为轻量级的 Connection极大减少了操作系统建立TCP connection 的开销。
RabbitMQ中的相关概念
Exchange: message 到达 broker 的第一站,根据分发规则,匹配查询表中的 routing key,分发消息到queue 中去。常用的类型有: direct (point-to-point), topic (publish-subscribe) and fanout (multicast)
Queue: 消息最终被送到这里等待 consumer 取走
Binding: exchange和queue 之间的虚拟连接,binding 中可以包含 routing key。Binding 信息被保存到exchange中的查询表中,用于 message的分发依据
RoutingRabbitMQ 提供了 6 种工作模式: 简单模式、work queues、路由模式、Topics 主题模式、RPC 远程调用模式(远程调用,不太算 MQ;暂不作介绍)。
JMS
JMS 即Java 消息服务 (JavaMessage Service) 应用程序接口,是一个Java 平台中关于面向消息中间件的API
JMS是JavaEE规范中的一种,类比JDBC
很多消息都实现了JMS规范,例如:ActiveMQ。RabbittMQ官方没有提供JMS的实现包,但是开源社区有
三、rabbitMQ安装
rebbitMQ官网:
1.下载安装:
请按照文档操作
文档下载:RabbitMQ安装说明文档
工具下载:rabbitmq工具下载
2.创建用户
创建用户
创建虚拟机
点进虚拟机,授权刚才创建的用户
3.rabbitMQ管控台使用
登录刚才创建的用户,解决not fount
在rabbitmq默认安装路径/usr/share/doc/rabbitmq-server-3.6.5/,找到 rabbitmq.config.example 文件复制文件到/etc/rabbitmq/rabbitmq.config,然后重启rabbitmq服务。
service rabbitmq-server start # 启动服务
service rabbitmq-server stop # 停止服务
service rabbitmq-server restart # 重启服务
文章评论