RabbitMQ学习笔记 01、RabbitMQ基本认识与环境搭建

举报
长路 发表于 2022/11/28 20:16:51 2022/11/28
【摘要】 文章目录前言一、初识RabbitMQ1.1、MQ的核心思想与基本介绍1.2、mq的特点1.3、AMQP协议1.4、mq的核心概念二、 RabbitMQ的安装和启动2.1、Linux安装MQ三、RabbitMQ管理后台3.1、添加用户并登陆管理后台3.2、概览页面3.2.1、Overview部分介绍3.2.2、其他模块(含新增用户以及新增虚拟机)参考文章 前言 本篇博客是进行RabbitMQ的基础认

@[toc]

前言

本篇博客是进行RabbitMQ的基础认识以及环境搭建,若文章中出现相关问题,请指出!

所有博客文件目录索引:博客目录索引(持续更新)

博客案例代码可见:Gitee-demoexer/RabbitMQGithub-javademos/RabbitMQ

一、初识RabbitMQ

1.1、MQ的核心思想与基本介绍

核心思想:接收并转发消息,可以看做是邮局。 接收存储转发的是二进制消息叫做message。

MQ中有三个术语(思想):一般的话这三个角色不在一台机子上,通常在多个服务器上,一大好处解耦

  • producer:生产者或消息发送者,通常用P来表示。消息的来源,谁去发消息,谁就是生产者。
  • queue:相当于一个邮箱(可命名),有RabbitMQ来管理,消息发送给mq之后,由mq来进行管理,也就会保存在queue里面,这个队列可以是无限延长的。一个队列能够存储来自多个producer,同时也能够被多个消费者消费。
  • consumer:消费者,C表示,其会从queue中获取消息。

消息队列:MQ就是message queue。

三个作用:①允许入列。②存储消息。③把消息出列。

特性:①业务无关。只需要做好消息分发即可。②FIFO,具有队列性质。③容灾,也就是生产者传输过来的消息是能够进行持久化的。有能力在恢复服务之后将消息捞出来。保证可靠性。④性能,吞吐量大。

为什么要使用消息队列

  1. 系统解耦。(实际上也很多的模块,如电商中的优惠券模块、订单模块等等)例如一些日志记录我们就可以放在消息队列中,由mq来进行统一分发出去!而不是让生产者来进行操作!
  2. 异步调用。(我先告诉你做这件事情,不等你做完就直接返回了;对于同步是告诉你做这个事等你做完我再返回)如下单操作等等,mq会根据你的消息来进行不同任务分发!
  3. 流量削峰:一段时间可能会出现流量高峰,mq会讲这些请求存放在自己的队列中,在以我们能够接收的速度发给我们。解决了突然高并发时机器不够造成的瘫痪,能够将高流量做一下缓冲,将压力化解。

image-20210913222052090



1.2、mq的特点

1、开源、跨语言,能够支持java、python、rubby等开发。

2、底层使用Erlang语言编写的。(之前在交换机领域广泛应用,在通信里面是很受欢迎的),该语言性能特别好,在通信领域有很大优势。

3、应用广泛。很多大公司都会以mq来作为消息通信的组件,有些公司会在它身上进一步封装。

4、社区活跃、API丰富。

技术选型:根据速度延迟因素也会决定。



1.3、AMQP协议

Advanced Message Queuing Protocol:高级消息队列协议。专门面向消息中间件的一种开放式标准应用层协议,也可以理解为是一套规范。

image-20210913224443000

  • Publisher、Consumer:生产者与消费者。
  • 服务器(server)
  • 虚拟主机:一个mq可以给很多的完全独立的用户提供服务,每一个服务可以使用虚拟主机划分,各个服务之间不会受到影响。
  • 交换机:在虚拟主机中包含交换机。
  • 消息队列:交换机下面会连通消息队列,它们是一个绑定的关系

连接关系:publisher把消息发送到server,接着找到virtual host,接着对应一个exchange,接着mq会正确的将消息投递到mq中。

作为我们的消费者与message queue绑定即可,消费者的话不需要管上面的内容。

  • 优势:达到解耦!也就是说我们生产者不需要究竟投递到哪个队列中;而消费者只需要监听队列,不需要管消息是怎么投递的。这里的exchange与message queue它们会有绑定关系,绑定的时候通过roting key路由件进行绑定的,有了这个之后就可以知道通过什么规则把消息转到哪个队列上。


1.4、mq的核心概念

架构与名词介绍

MQ的架构

image-20210913224552272

Server:服务;mq必须要启动一个服务才能给我们消息接收与发送的能力。

Connection:与server进行连接,主要就是应用程序与服务端之间进行建立连接的。

Channel:一个connection中包含多个channel。信道的意思,几乎所有的操作都在信道上进行,客户端可以建立多个信道。后序我们的操作也是去操作的channel,比如说绑定队列都是在channel上进行的。

Message:消息,由properties和body组成的。第一部分properties对消息进行一些额外的修饰如包括消息的优先级,队列的延迟还有消息的其他属性包括自定义的属性都可以往properties中写。第二部分body就是消息的实体,相当于我们具体所传输的消息放在其中。

virtual host:虚拟主机(独立的单元),顶层隔离作用。同一个虚拟主机下,不能有重复的交换机和queue

Exchange:交换机,接收生产者的消息的,然后根据指定的路由器去把消息转发到所绑定的队列上。

binding:绑定交换机和队列。

  • 绑定关系中包含一个routing key:路由键,路由规则,虚拟机可以用它来确定这个消息如何进行一个路由。

queue:队列,消费者只需要监听队列来消费消息,不需要关注消息来自于哪个Exchange。

  • Exchange与Message Queue存在着绑定的关系,一个Exchage可以绑定多个消息队列。

消息流转过程

image-20210913230334417



二、 RabbitMQ的安装和启动

2.1、Linux安装MQ

erlang的Github地址

RabbitMQ的Github下载地址

RabbitMQ 最好安装教程:比较详细,比较新

安装erlang

# 配置erlang源
vim /etc/yum.repos.d/rabbitmq_erlang.repo

配置信息如下:导入密钥操作在里面已经添加

# In /etc/yum.repos.d/rabbitmq_erlang.repo
[rabbitmq_erlang]
name=rabbitmq_erlang
baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/$basearch
repo_gpgcheck=1
gpgcheck=1
enabled=1
# 导入密钥 PackageCloud's repository key and RabbitMQ package signing key
gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
       https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

[rabbitmq_erlang-source]
name=rabbitmq_erlang-source
baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/SRPMS
repo_gpgcheck=1
gpgcheck=0
enabled=1
# PackageCloud's repository key and RabbitMQ package signing key
gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
       https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

接着安装erlang

# 安装
yum install erlang

# 测试版本
erl -version

# 进入erl交互界面
erl 

安装rabbitmq

# 导入密钥,由于前面配置文件中已配置可不用
# rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc

# 可能会有超时情况,需要fq,fq即可下载
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.2/rabbitmq-server-3.8.2-1.el7.noarch.rpm

# 安装rabbit-server
yum install rabbitmq-server-3.8.2-1.el7.noarch.rpm

此时我们运行rabbitmq出现以下问题

systemctl start rabbitmq-server

image-20210914012528009

解决方案

原因:虚拟机中没有设置指定主机名!

# 在hosts文件中进行配置主机名
vim /etc/hosts

# ***配置内容***
192.168.118.128 test0001
# ***配置内容***

# 保存好之后,使用命令进行生效
/etc/init.d/network restart

# 此时再次运行rabbitmq即可运行!!!
systemctl start rabbitmq-server

image-20210914012646733

rabbitmq相关命令:启动,停止等命令

# 停止RabbitMQ
rabbitmqctl stop

# 设置开机启动
systemctl enable rabbitmq-server

# 启动rabbitmq
systemctl start rabbitmq-server

# 查看状态
rabbitmqctl status

# 检查RabbitMQ服务器的状态
systemctl status rabbitmq-server

# 开启web管理界面  访问ip:15672 ,暂时访问不通
rabbitmq-plugins enable rabbitmq_management


三、RabbitMQ管理后台

3.1、添加用户并登陆管理后台

安装好mq之后,我们来尝试启动mq并进入mq的管理后台

# 启动mq服务器
systemctl start rabbitmq-server

# 查看状态
rabbitmqctl status

若是查看状态为如下信息表示启动正常:

image-20210914230037529

接下来我们启动管理后台:

# 启动管理后台,使用插件开启
rabbitmq-plugins enable rabbitmq_management

image-20210914230140156

此时我们来访问http://192.168.118.128:15672/即可!

image-20210914230404126

# 创建用户 用户名密码为admin password
rabbitmqctl add_user admin password

# 为用户名admin来添加分类:为用户名为admin添加管理员权限administrator
rabbitmqctl set_user_tags admin administrator

# 查看当前用户与分类,默认会自带一个guest用户
rabbitmqctl list_users

接着我们来进行登陆输入用户名与密码:admin password

image-20210914231618790



3.2、概览页面

3.2.1、Overview部分介绍

Totals及node

image-20210914232819293

  • Uptime:启动了多长时间
  • Info:其中disc指的是mq默认采用磁盘存储的,想要修改为内存存储你就需要在启动mq时加上–ram即可!
    • 默认disc指的就是当收到信息时会存储到磁盘中,若是以内存存储就存在内存中速度会更快一点(一定程度上提高性能),不过在一定程度上降低了可靠性,因为磁盘是断电的能够保存信息。

Churn statistics

image-20210914232626539


Ports and contexts:端口与上下文信息

image-20210914232319484


Export definitionsImport definitions

一般我们来管理集群的时候通过导入的形式来管理对应的队列,而不是一个个手动配置:

image-20210914232348163



3.2.2、其他模块(含新增用户以及新增虚拟机)

其中连接、信道、queue就是对来访的以及正在进行中的进行统计信息展示等等。

交换机包含六种模式:

image-20210914233013397

image-20210914233414747

image-20210914233727487

在Admin管理界面中的虚拟机中来对虚拟机进行操作

①添加新的虚拟注解

image-20210915005730948

image-20210915005742938

②给/虚拟主机新增一个权限

step1:点击左边的/

image-20210914234206706

step2:此时出现新页面,添加设置权限

image-20210914234240147

image-20210914234323323

step3:回到页面,查看

image-20210914234409854



参考文章

RabbitMQ学习(一)-安装配置

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。