消息队列-RabbitMQ入门篇

753 阅读6分钟

这是我参与8月更文挑战的第13天,活动详情查看:8月更文挑战

消息队列

消息队列可以理解为一种应用间的通信方式,也可以理解为就是一个暂存消息的地方。如在消息队列中,服务A要发送一条消息给服务B,服务A并不会直接把消息直接发送给B,而是把消息发送到消息队列中,然后B从消息队列中获取消息,A发送消息后不必一直等待消息被成功处理才返回,A发送后就继续去干自己的事,B不需要知道是谁发的消息只管从消息队列中取消息,这样服务A和服务B之间就实现了异步和解耦

RabbitMQ

RabbitMQ是一个实现了AMQP(Advanced Message Queuing Protocol)高级消息队列协议的消息队列服务,用Erlang语言编写。

优点

  • 解耦。消息中间件最主要的作用是解耦,中间件最标准的用法是生产者生产消息传送到队列,消费者从队列中拿取消息并处理,生产者不用关心是谁来消费,消费者不用关心谁在生产消息,从而达到解耦的目的。RabbitMQ主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时,消费者无法快速消费,那么需要一个中间层,保存这个数据。

  • 流量削峰。如我们最熟悉不过的抢课,当系统开始开放选课时,系统将会瞬时有大量的请求打入接口业务逻辑处理,导致应用占据服务器资源,为了避免宕机,我们可以在将这些大量的请求先存入到消息队列中, 而不直接打入我们的系统后台业务处理接口,然后再由我们接口从消息队列中来获取这些请求并处理,避免大量请求打入后端接口。

  • 异步处理。如用户注册服务,当用户完成填写密码等信息提交注册后,后端会进行一系列处理,例如将信息保存到数据库、发送注册成功邮件、微信推送消息等,如果用户提交注册后还要等这些操作完成后才能返回登录成功,而完成这些服务需要耗费时间,所以用户会比较反感,因此我们可以利用RabbitMQ,用户注册后直接返回注册成功,而像发送邮件这些,我们只需要将用户信息投递到消息队列,由邮件服务到RabbitMQ中取数据再去发送邮件,这样就能实现异步处理,优化用户体验。

Centos7下RabbitMQ的安装

  1. 首先我们需要到官网下载RabbitMq的安装包,官网传送门

  2. Centos7.x、Erlang,RabbitMQ是采用Erlang语言开发的,所以系统环境必须提供Erlang环境。

  3. 将下载的Erlang安装包上传到Linux服务器上,离线安装Erlang,注意,Erlang的版本要和RabbitMq的版本匹配,不然后面会出Bug

    • 上传后使用以下命令解压安装包
    rpm -ivh erlang-22.3.4.1-1.el7.x86_64.rpm
    
    
    • 安装Erlang,输入以下命令
        yum install -y erlang
    
    • 验证是否安装完成,输入erl命令
    [root@localhost rabbitmq]# erl
    Erlang/OTP 22 [erts-10.7.2.1] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:1] [hipe]
    Eshell V10.7.2.1  (abort with ^G)
    1> halt(). 
    
  4. 安装RabbitMQ

    (1)到官网下载对应的安装包,注意RabbitMQ的版本要和Erlang版本对应

    (2)安装RabbitMQ前要先安装socat

     yum install -y socat
    

    (3) 正式安装RabbitMQ,将官网下载的rpm安装包上传到服务器上指定的目录下,使用以下命令进行解压.

    [root@localhost rabbitmq]# rpm -Uvh rabbitmq-server-3.8.14-1.el7.noarch.rpm
    

    (4) 安装RabbitMQ

     yum install rabbitmq-server -y
    

    (5)启动RabbitMQ服务

    • 启动RabbitMQ服务 systemctl start rabbitmq-server
    • 查看RabbitMQ服务的状态 systemctl status rabbitmq-server
    • 设置RebbitMQ开机自启动 systemctl enable rabbitmq-server
    [root@localhost rabbitmq]# systemctl start rabbitmq-server   
    [root@localhost rabbitmq]# systemctl status rabbitmq-serverrabbitmq-server.service - RabbitMQ broker
       Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; disabled; vendor preset: disabled)
       Active: active (running) since2021-03-20 22:15:43 CST; 46s ago
     Main PID: 57258 (beam.smp)
       Status: "Initialized"
       Memory: 86.0M
       CGroup: /system.slice/rabbitmq-server.service
               ├─57258 /usr/lib64/erlang/erts-10.7.2.1/bin/beam.smp -W w -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1048576 -t 5000000 -stbt db -zdbb...
               ├─57273 erl_child_setup 32768
               ├─57294 /usr/lib64/erlang/erts-10.7.2.1/bin/epmd -daemon
               ├─57313 inet_gethost 4
               └─57314 inet_gethost 4
    
    320 22:15:35 localhost.localdomain rabbitmq-server[57258]: ##########  Licensed under the MPL 2.0. Website: https://rabbitmq.com
    320 22:15:35 localhost.localdomain rabbitmq-server[57258]: Doc guides: https://rabbitmq.com/documentation.html
    320 22:15:35 localhost.localdomain rabbitmq-server[57258]: Support:    https://rabbitmq.com/contact.html
    320 22:15:35 localhost.localdomain rabbitmq-server[57258]: Tutorials:  https://rabbitmq.com/getstarted.html
    320 22:15:35 localhost.localdomain rabbitmq-server[57258]: Monitoring: https://rabbitmq.com/monitoring.html
    320 22:15:35 localhost.localdomain rabbitmq-server[57258]: Logs: /var/log/rabbitmq/rabbit@localhost.log
    320 22:15:35 localhost.localdomain rabbitmq-server[57258]: /var/log/rabbitmq/rabbit@localhost_upgrade.log
    320 22:15:35 localhost.localdomain rabbitmq-server[57258]: Config file(s): (none)
    320 22:15:42 localhost.localdomain rabbitmq-server[57258]: Starting broker... completed with 0 plugins.
    320 22:15:43 localhost.localdomain systemd[1]: Started RabbitMQ broker.
    
    
  5. RabbitMQ Web管理界面及授权操作

    • 默认情况下,rabbitMq是没有安装web的客户端插件,需要安装才可以生效
    [root@localhost rabbitmq]# rabbitmq-plugins enable rabbitmq_management #安装后即可通过服务器ip地址+:15672 访问RabbitMqWeb端,RabbitMq是有一个默认的账号和密码guest,默认情况下只能在本机下访问,所以需要添加一个远程登录的用户
    
    • 默认只能在本机下登录RabbitMQWeb端,所以我们需要授权账户和密码,以提供远程访问. 主要有以下几种用户级别:

      1、administrator:可以登录控制台,查看所有信息、可以定义rabbitMQ进行管理

      2、 monitoring : 监控者 登录控制台,查看所有信息

      3、policymarker : 策略制定者,登录控制台,制定策略

      4、management : 普通管理员 登录控制台

    (1)新增用户 
    [root@localhost rabbitmq]# rabbitmqctl add_user admin admin 
    Adding user "admin" ... 
    Done. Don't forget to grant the user permissions to some virtual hosts! See 'rabbitmqctl help set_permissions' to learn more. 
    (2)设置用户分配操作权限 
    [root@localhost rabbitmq]# rabbitmqctl set_user_tags admin administrator 
    Setting tags for user "admin" to [administrator] ... ** 
    
    
  6. 使用服务器的IP+端口号,如192.268.188.130:15672即可访问RabbitMQ Web管理界面,输入账户密码,即可显示RabbitMQweb端管理界面,如下:

image.png

🏁以上就是对入门RabbitMQ的简单介绍,后面会继续推出RabbitMQ的相关文章,欢迎大家关注,如果有错误的地方,还请留言指正,如果觉得本文对你有帮助那就点个赞👍吧😋😻😍

默认标题_动态分割线_2021-07-15-0.gif