消息队列MQ(一)——RabbitMQ的介绍、安装以及管理页面的使用

系列文章目录

消息队列MQ(一)——RabbitMQ的介绍、安装以及管理页面的使用
消息队列MQ(二)——Spring Boot整合RabbitMQ
消息队列MQ(三)——RabbitMQ高级特性与RabbitMQ集群搭建


学习目标:

  • 能够说出什么是消息队列,并知晓消息队列的应用场景
  • 能够说出RabbitMQ的5种模式特征
  • 能够安装RabbitMQ
  • 能够使用SpringBoot整合RabbitMQ

学习内容:

一、消息队列MQ概述

MQ全称为Message Queue,消息队列是应用程序应用程序之间的通信方法。RabbitMQ是一个Erlang开发的AMQP(Advanced Message Queuing Protocol )的开源实现。

1.1 为什么使用MQ

在项目中,可将一些无需即时返回且耗时的操作提取出来,进行异步处理,而这种异步处理的方式很大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。
开发中消息队列通常有如下应用场景:
(1) 异步提速:
任务异步处理,将不需要同步处理的,且耗时较长的操作,由消息队列通知消息接收方进行异步处
理。提高了应用程序的响应时间。
(2) 应用解耦:
应用程序解耦合,MQ充当中介,生产方通过MQ与消费方交互,它将应用程序进行解耦合
(3) 削峰填谷:
在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见;如果为以能处
理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。使用MQ能够使关键组件顶住突发的访
问压力,而不会因为突发的超负荷的请求而完全崩溃。
(4) 可恢复性:
系统的一部分组件失效时,不会影响到整个系统。MQ降低了进程间的耦合度,所以即使一个处理消
息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。
(5) 排序保证:
消息队列可以控制数据处理的顺序,因为消息队列本身使用的是队列这个数据结构, FIFO (先进选
出),在一些场景数据处理的顺序很重要,比如商品下单顺序等。

1.2. 消息队列产品

市场上常见的消息队列有如下:
ActiveMQ:基于JMS实现, 比较均衡, 不是最快的, 也不是最稳定的.
ZeroMQ:基于C语言开发, 目前最好的队列系统.
RabbitMQ:基于AMQP协议,erlang语言开发,稳定性好, 数据基本上不会丢失
RocketMQ:基于JMS,阿里巴巴产品, 目前已经捐献给apahce, 还在孵化器中孵化.

Kafka:类似MQ的产品;分布式消息系统,高吞吐量, 目前最快的消息服务器, 不保证数据完整性.

1.3. AMQP 和 JMS

Dubbo协议:Dubbo 缺省协议采用单一长连接和 NIO 异步通讯,适合于小数据量大并发的服务调 用,以及服务消费者机器数远大于服务提供者机器数的情况。 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网 络传输协议,所有的WWW文件都必须遵守这个标准。 AMQP协议:即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高 级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。

MQ是消息通信的模型;实现MQ的大致有两种主流方式:AMQP、JMS。

1.3.1. AMQP

AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。更准确的说是一种binary wire-levelprotocol(链接协议)。这是其和JMS的本质差别,AMQP不从API层进行限定,而是直接定义网络交换的数据格式。

1.3.2. JMS

JMS即Java消息服务(JavaMessage Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。

1.3.3. AMQP 与 JMS 区别

JMS是定义了统一的接口,来对消息操作进行统一;AMQP是通过规定协议来统一数据交互的格式JMS限定了必须使用Java语言;AMQP只是协议,不规定实现方式,因此是跨语言的。JMS规定了两种消息模式;而AMQP的消息模式更加丰富.

JMSAMQP
定义Java apiWire-protocol
跨语言
跨平台

1.4. RabbitMQ

RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实
现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。

RabbitMQ官方地址:http://www.rabbitmq.com/

RabbitMQ提供了6种模式:
	1.Hello Word简单模式
	2.work工作模式
	3.Publish/Subscribe发布与订阅模式
	4.Routing路由模式
	5.Topics主题模式(通配符模式)
	6.RPC远程调用模式(远程调用,不太算MQ;不作介绍)
官网对应模式介绍:https://www.rabbitmq.com/getstarted.html

应用场景:
1、双十一商品秒杀/抢票功能实现
我们在双11的时候,当我们凌晨大量的秒杀和抢购商品,然后去结算的时候,就会发现,界面会提醒我们,让我们稍等,以及一些友好的图片文字提醒。而不是像前几年的时代,动不动就页面卡死,报错等来呈现给用户。
2、积分兑换(积分可用于多平台)
积分兑换模块,有一个公司多个部门都要用到这个模块,这时候就可以通过消息队列解耦这个特性来实现。 各部门系统做各部门的事,但是他们都可以用这个积分系统进行商品的兑换等。其他模块与积分模块完全解耦。
3、大平台用户注册
发送邮件、用户大数据分析操作等 基于同步变异步功能实现
用户注册真实操作步骤:

  1. 用户注册选择的兴趣标签,根据用户的属性,行为进行用户分析,计算出推荐内容
  2. 注册后可能需要发送邮件给用户
  3. 发送短信给用户
  4. 发送给用户指南的系统通知
  5. …等等

正常情况注册,不出现高并发,假如有大量的用户注册,发生了高并发,就会出现如下情况:
邮件接口承受不住,或是分析信息时的大量计算使 cpu 满载,这将会出现虽然用户数据记录很快的添加到数据库中了,但是却卡在发邮件或分析信息时的情况,导致请求的响应时间大幅增长,甚至出现超时,这就有点不划算了。面对这种情况一般也是将这些操作放入消息队列(生产者消费者模型),消息队列慢慢的进行处理,同时可以很快的完成注册请求,不会影响用户使用其他功能。

1.5 相关定义:

Connection: publisher/consumer 和 broker 之间的 TCP 连接
Channel: 消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务
Exchange: 消息交换机,它指定消息按什么规则,路由到哪个队列
Queue: 消息队列载体,每个消息都会被投入到一个或多个队列
VHost: 虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。
在这里插入图片描述
由Exchange、Queue、RoutingKey三个才能决定一个消息从Exchange到Queue的唯一的线路. (简单模式的Exchange是用默认的交换机,不需要配置)

二、安装及配置RabbitMQ

2.1 docker安装RabbitMQ

下载镜像
docker pull rabbitmq:management

创建容器
docker run -d --restart=always --name=rabbitmq -p 5671:5617 -p 5672:5672 -
p4369:4369 -p 15671:15671 -p 15672:15672 -p 25672:25672 rabbitmq:management

设置容器开机自动启动
docker update --restart=always 容器ID

访问后台
浏览器中输入地址http://rabbitMQ所在机器ip:15672/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 用户以及Virtual Hosts配置

2.2.1. 用户角色

RabbitMQ在安装好后,可以访问http://rabbitMQ所在机器ip:15672;其自带了guest/guest的用户名和密码;如果
需要创建自定义用户;那么也可以登录管理界面后,如下操作:
在这里插入图片描述
角色说明:
1、超级管理员(administrator),可登陆管理控制台,可查看所有的信息,并且可以对用户,策略(policy)进行操作。
2、监控者(monitoring),可登陆管理控制台,同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
3、策略制定者(policymaker),可登陆管理控制台, 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。
4、普通管理者(management),仅可登陆管理控制台,无法看到节点信息,也无法对策略进行管理。
5、其他,无法登陆管理控制台,通常就是普通的生产者和消费者。

2.2.2 Virtual Hosts配置

RabbitMQ的权限管理;在RabbitMQ中可以虚拟消息服务器Virtual Host,每个Virtual Hosts相当于一个相对独立的RabbitMQ服务器,每个VirtualHost之间是相互隔离的exchange,queue,
message不能互通。相当于mysql的db。Virtual Name一般以/开头。
1.创建Virtual Hosts
在这里插入图片描述
2.设置Virtual Hosts权限
在这里插入图片描述
在这里插入图片描述

2.2.3 添加队列

在这里插入图片描述
持久化: 如果选durable,则队列消息自动持久化到磁盘上,如果选transient,则不会持久化;

自动删除: 默认值no,如果yes,则在消息队列没有使用的情况下,队列自行删除。

2.2.4 添加交换机

在这里插入图片描述
自动删除: 默认值no,如果是yes,则在将所有队列与交换机取消绑定之后,交换机将自动删除。

交换机类型:

  • fanout:广播类型
  • direct:路由类型
  • topic:通配符类型,基于消息的路由键路由
  • headers:通配符类型,基于消息的header路由

内部交换器:默认值no,如果是yes,消息无法直接发送到该交换机,必须通过交换机的转发才能到达次交换机。本交换机只能与交换机绑定。

2.2.5 队列与交换机绑定

在这里插入图片描述
在这里插入图片描述


总结

以上是对RabbitMQ的学习输出,有兴趣的同学可以继续尝试其他设置按钮。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
本文的主要研究内容是工作流的基础理论及其实现技术。包括以下工作:工作流管理系统的体系结构设计、过程模型的建模以及对该模型进行描述的过程定义语言开发、工作流的实现技术研究。 本文首先结合当前主流建模理论和方法,提出了过程模型的设计原则,并建立了XXWorkflow过程模型,该模型具备类似UML(Unified Modeling Language, UML)活动图的表示形式,完备地表达了经营过程中的活动以及活动间的各种逻辑关系;接着,开发了对此模型进行描述的过程定义语言,是一种基于XML的过程定义语言,它符合WfMC (Workflow Management Coalition, WfMC)的规范XPDL1.0 (XML Process Definition Language, XPDL),从而实现了过程定义的共享;然后,设计出了类似Windows DNA (Distributed Network Application, DNA)层次结构的五层系统体系结构,并提出了其切实可行的实现方案,该方案实现了“过程建模与配置工具”、“工作流引擎”、“客户应用”及“应用注册”等主要功能软件构件;最后,开发了XXWorkflow原型系统,其通信基础结构采用了持久消息队列和socket技术,实现了异步通信,并保证消息不会丢失。 XXWorkflow完成了工作流的定义和管理,并按照预先定义好的工作流逻辑推进工作流实例的执行。它从更高的层次上提供了实现物料流、资金流、信息流及其涉及的相关过程与应用的集成机制,这使得企业能够实现业务过程集成、业务过程自动化与业务过程的管理。XXWorkflow的内容覆盖了工作流基础理论和实现技术的研究,同时也是对本文研究工作的验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冉木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值