# RabbitMQ Notes

组件名称：RabbitMQ-Server  
安装文档：https://www.rabbitmq.com/download.html  
配置文档：https://www.rabbitmq.com/admin-guide.html  
支持平台： Debian家族 | RHEL家族 | Windows | Kubernetes |Docker  

责任人：helin

## 概要

RabbitMQ是一款开源的MQ系统，它包含RabbitMQ-Server和RabbitMQ-Client，服务器上运行的是RabbitMQ-Server

## 环境要求

* 程序语言：Java 
* 应用服务器：自带
* 数据库：无
* 依赖组件：Erlang
* 服务器配置：最低1核2G
* 其他：

## 安装说明

官方建议使用其自身提供的erlang和rabbitmq-server的仓库，不建议使用操作系统自带的仓库或其他第三方仓库。同时，官方提供了自动安装仓库的自动化脚本。

下面基于不同的安装平台，分别进行安装说明。

### CentOS

```shell
# 分别安装erlang源和rabbitmq-server源
curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash

# 安装
yum install erlang rabbitmq-server -y
```

### Ubuntu

```shell
# 分别安装erlang源和rabbitmq-server源
curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.deb.sh | sudo bash
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.deb.sh | sudo bash

# 安装
sudo apt-get update -y
apt install erlang rabbitmq-server -y
```

## 配置

安装完成后，需要依次完成如下配置

```shell
# Set RabbitMQ
- name: Restart RabbitMQ
  shell: systemctl start rabbitmq-server

- name: Enable the management console of RabbitMQ
  shell: rabbitmq-plugins enable rabbitmq_management

- name: Create administrator for RabbitMQ console
  shell: |
    rabbitmqctl add_user admin admin
    rabbitmqctl set_user_tags admin administrator
```

## 路径

* 程序路径：/usr/lib/rabbitmq/lib/rabbitmq_server-*
* 日志路径：/var/log/rabbitmq  
* 配置文件路径：  
* 其他...

## 账号密码

### 数据库密码

如果有数据库

* 数据库安装方式：包管理工具自带 or 自行安装
* 账号密码：

### 后台账号

如果有后台账号

* 登录地址
* 账号密码
* 密码修改方案：最好是有命令行修改密码的方案


## 服务

本项目安装后自动生成：rabbitmq-server 服务

备注：如果开机没有服务，程序无法运行的情况下，需要自行编写服务后存放到项目中

服务的模板如下：

```
[Unit]
Description=Redmine
After=nginx.service
[Service]
Environment=RAILS_ENV=production
Type=simple
WorkingDirectory=/data/wwwroot/redmine
ExecStart=/usr/local/bin/puma -b tcp://127.0.0.1:9292 -e production 
User=redmine
[Install]
WantedBy=multi-user.target
```

## 环境变量

列出需要增加的环境变量以及增加环境变量的命令：

* 名称 | 路径

## 版本号

通过如下的命令获取主要组件的版本号: 

```
# Check RabbitMQ version
sudo rabbitmqctl status | grep RabbitMQ*

# Check Erlang version
ls /usr/lib64/erlang
```

## 常见问题

#### 有没有管理控制台？

*http:// 公网 IP:15672* 即可访问控制台，系统默认存在一个无法通过外网访问的guest/guest账号

#### 本项目需要开启哪些端口？

| item      | port  |
| --------- | ----- |
| lustering | 25672 |
| AMQP      | 5672  |
| http      | 15672 |

#### 有没有CLI工具？

有，通过 `rabbitmqctl` 查看工具的说明

#### 安装后是否需要创建普通用户？

有，rabbitmq
