暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

RabbitMQ第一弹 搭建环境

波波的小书房 2021-08-10
377

大家好,这个系列我要介绍的是消息中间件RabbitMQ,消息中间件在高并发场景下能解决很多问题,在面试中也是比较常问的。现在消息中间件有很多种,比如ActiveMQ(JMS的实现)和RocketMQ等,而我选择RabbitMQ的原因也是觉得它更火吧,关于几大主流消息中间件的对比后面的文章再讲,今天就先入个门,从搭建环境讲起。

1、RabbitMQ简介

RabbitMQ是采用Erlang编写的开源消息代理服务器,基于AMQP(Advanced Message Queuing Protocol)开放协议,具有高可靠、易扩展、高可用的特点及丰富的功能特性。


RabbitMQ的特性:

  • 开源;

  • 平台和供应商无关性:AMQP具有平台和供应商无关性,而RabbitMQ实现了AMQP,且RabbitMQ提供了几乎所有语言的客户端;

  • 轻量级;

  • 插件机制:比如利用插件直接将消息写入数据库;

  • 安全:客户端可以使用SSL通信和客户端证书验证以提高安全性;可以使用插件与外部LDAP系统集成;

  • 管理界面;

  • 多种协议:除了AMQP协议,还支持MQTT、Stomp和XMPP等协议;


RabbitMQ使用Erlang语言自带的进程间通信(IPC)机制实现跨节点通信。

AMQP定义了三种抽象组件用于指定消息的路由行为:

  • 交换器(Exchange):MQ中用于把消息路由到队列的组件;

  • 队列(Queue):用来存储消息的数据结构,位于硬盘或内存中;

  • 绑定(Binding):一套规则,用于告诉交换器消息应该被存储到哪个队列;

消息中间件一般有两种传递模式:

  • 点对点模式:基于队列,队列使得消息可以异步传输;

  • 发布订阅模式:基于主题,适用于一对多广播;

消息中间件作用:

  • 解耦

  • (冗余)存储

  • 扩展性

  • 削峰

  • 可恢复性

  • 保证顺序性

  • 缓冲

  • 异步通信

2、安装erlang

由于RabbitMQ是用erlang编写的,所有首先要搭建erlang环境。这里我介绍一下在centos上通过yum方式安装erlang的方法。


第一步:添加yum源。

在目录 etc/yum.repos.d/ 下存储了yum常用的源,这里我们自己建立一个。

vi /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=0
enabled=1
gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
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
gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300


第二步:安装。

yum install -y erlang


第三步:验证是否安装成功。

erl -version


如果上述方式不好使,那么还可以直接下载rpm文件进行安装。

wget --content-disposition https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-23.3.1-1.el7.x86_64.rpm/download.rpm
yum -y install erlang-23.3.1-1.el7.x86_64.rpm/download.rpm


更多安装方式请参考 https://packagecloud.io/rabbitmq/

3、安装RabbitMQ

使用如下命令安装RabbitMQ。

wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.14/rabbitmq-server-3.8.14-1.el7.noarch.rpm
yum -y install rabbitmq-server-3.8.14-1.el7.noarch.rpm


RabbitMQ默认的安装目录为/usr/lib/rabbitmq/lib。

安装好后,在/sbin目录下会有如下文件。


启动RabbitMQ。

systemctl start rabbitmq-server


RabbitMQ默认的TCP端口号是5672。

如果启动不了,可能与域名有关,需要在hosts文件中添加主机ip和主机名的映射。

vi /etc/hosts


RabbitMQ有一个非常美观的管理界面,不过需要手动开启。

rabbitmq-plugins enable rabbitmq_management

后台管理开启成功后,访问 http://ip:15672/,即可访问到管理界面。


默认的guest/guest用户只能通过本地主机登录,如下图所示。

因此我们添加一个后台管理员用户。

# 添加用户
rabbitmqctl add_user bobo ok
# 设置用户角色
rabbitmqctl set_user_tags bobo administrator
# 设置用户权限
rabbitmqctl set_permissions -p bobo '.*' '.*' '.*'

这里的授权命令格式如下所示。

rabbitmqctl set_permissions -p /vhost username conf write read

这个命令有几点我解释一下。

  • vhost,即VirtualHost,相当于一个相对独立的RabbitMQ服务器,每个vhost之间是相互隔离的;vhost可以理解为关系型数据库中的schema。RabbitMQ的权限是vhost级别的,而不是用户级别;

  • conf:可配置权限(队列和交换器的创建及删除等);

  • write:可写权限(发布消息);

  • read:可读权限(与消息有关的操作,包括读取消息及清空整个队列等);

关于交换器和队列的概念我后面的文章会介绍到。


用新用户登录RabbitMQ的管理界面,如下图所示。


rabbitmqctl 工具是用来管理RabbitMQ 中间件的命令行工具。

RabbitMQ Management插件不仅提供了Web管理界面,还提供了HTTP API接口来方便调用,具体的HTTP API请自行百度。


其它命令 。

# 查询所有用户
rabbitmqctl list_users
# 开启某个插件
rabbitmq-plugins enable xxx
# 关闭某个插件
rabbitmq-plugins disable xxx




文章转载自波波的小书房,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论