RabbitMQ详解(一):RabbitMQ相关概念
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
RabbitMQ是目前非常热门的一款消息中间件不管是互联网大厂还是中小企业都在大量使用。作为一名合格的开发者有必要对RabbitMQ有所了解本系列是RabbitMQ快速入门文章主要内容包括RabbitMQ是什么、RabbitMQ核心概念、五种消息模型、用Docker安装RabbitMQ等。
一、什么是AMQP 和 JMS
1、 AMQP
即Advanced Message Queuing Protocol高级消息队列协议是一个应用层网络协议提供统一消息服务。是应用层协议的一个开放标准为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息并不受客户端/中间件不同产品不同的开发语言等条件的限制。Erlang中的实现有RabbitMQ等。
2、JMS
即Java消息服务Java Message Service应用程序接口由sun公司提出并且sun公司定义好了接口。包括create、send、recieve。只要想使用它就得实现它定义的接口。 消息服务是一个与具体平台无关的API绝大多数MOM提供商都对JMS提供支持。不好的地方是语言层面的限制要求语言只能是JAVA而不能是python等这与微服务的思想相违背。
二、常见的MQ产品
ActiveMQ基于JMSApache
RocketMQRocket火箭阿里巴巴的产品基于JMS目前由Apache基于会维护
Kafka分布式消息系统亮点吞吐量超级高没秒中数十万的并发。
RabbitMQRabbit兔子由erlang语言开发基于AMQP协议在erlang语言特性的加持下RabbitMQ稳定性要比其他的MQ产品好一些。
三、RabbitMQ简介
1、概述
RabbitMQ是一个由erlang开发的AMQPAdvanced Message Queue 的开源实现官网地址http://www.rabbitmq.com。RabbitMQ作为一个消息代理主要负责接收、存储和转发消息它提供了可靠的消息机制和灵活的消息路由并支持消息集群和分布式部署常用于应用解耦耗时任务队列流量削锋等场景。本系列文章将系统介绍RabbitMQ的工作机制代码驱动和集群配置本篇主要介绍RabbitMQ中一些基本概念常用的RabbitMQ Control命令最后写一个C#驱动的简单栗子。先看一下RabbitMQ的基本结构
上图是RabbitMQ的一个基本结构生产者Producer和消费者Consumer都是RabbitMQ的客户端Producer负责发送消息Consumer负责消费消息。
2、核心概念
接下来我们结合这张图来理解RabbitMQ的一些概念
BrokerServer接受客户端连接实现AMQP消息队列和路由功能的进程我们可以把Broker叫做RabbitMQ服务器。
Virtual Host一个虚拟概念一个Virtual Host里面可以有若干个Exchange和Queue主要用于权限控制隔离应用。如应用程序A使用VhostA应用程序B使用VhostB那么我们在VhostA中只存放应用程序A的exchangequeue和消息应用程序A的用户只能访问VhostA不能访问VhostB中的数据。
Exchange接受生产者发送的消息并根据Binding规则将消息路由给服务器中的队列。ExchangeType决定了Exchange路由消息的行为例如在RabbitMQ中ExchangeType有Direct、Fanout、Topic和Header四种不同类型的Exchange路由规则是不一样的这些以后会详细介绍。
Queue消息队列用于存储还未被消费者消费的消息队列是先进先出的默认情况下先存储的消息先被处理。
Message就是消息由Header和Body组成Header是由生产者添加的各种属性的集合包括Message是否被持久化、由哪个Message Queue接受、优先级是多少等Body是真正传输的数据内容格式为byte[]。
Connection连接对于RabbitMQ而言其实就是一个位于客户端和Broker之间的TCP连接。
Channel信道仅仅创建了客户端到Broker之间的连接Connection后客户端还是不能发送消息的。需要在Connection的基础上创建ChannelAMQP协议规定只有通过Channel才能执行AMQP的命令一个Connection可以包含多个Channel。之所以需要Channel是因为TCP连接的建立和释放都是十分昂贵的。
3、RabbitMQ特点
RabbitMQ除了像兔子一样跑的很快以外还有这些特点
开源、性能优秀稳定性保障
提供可靠性消息投递模式、返回模式
与Spring AMQP完美整合API丰富
集群模式丰富表达式配置HA模式镜像队列模型
保证数据不丢失的前提做到高可靠性、可用性
4、RabbitMQ典型应用场景
- 异步处理。把消息放入消息中间件中等到需要的时候再去处理。
- 流量削峰。例如秒杀活动在短时间内访问量急剧增加使用消息队列当消息队列满了就拒绝响应跳转到错误页面这样就可以使得系统不会因为超负载而崩溃。
- 日志处理
- 应用解耦。假设某个服务A需要给许多个服务B、C、D发送消息当某个服务例如B不需要发送消息了服务A需要改代码再次部署当新加入一个服务服务E需要服务A的消息的时候也需要改代码重新部署另外服务A也要考虑其他服务挂掉没有收到消息怎么办要不要重新发送呢是不是很麻烦使用MQ发布订阅模式服务A只生产消息发送到MQB、C、D从MQ中读取消息需要A的消息就订阅不需要了就取消订阅服务A不再操心其他的事情使用这种方式可以降低服务或者系统之间的耦合。
到此就把RabbitMQ的相关概念介绍完了下一篇文章将要介绍如何使用Docker安装RabbitMQ和RabbitMQ的五种消息模型。
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |