1. 什么是消息中间件?
  2. 消息中间件的作用
  3. RabbitMQ 的安装及简单使用

1.什么是消息中间件?

消息队列中间件 (Message Queue Middleware ,简称为 MQ) 是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。

2.消息中间件的作用

  • 解耦:在项目启动之初来预测将来会碰到什么需求是极其困难的。消息中间件在处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口,这允许你独立地扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束即可。
  • **冗余〈存储)**: 有些情况下,处理数据的过程会失败。消息中间件可以把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。在把 个消息从消息中间件中删除之前,需要你的处理系统明确地指出该消息己经被处理完成,从而确保你的数据被安全地保存直到你使用完毕。
  • 扩展性: 因为消息中间件解耦了应用的处理过程,所以提高消息入队和处理的效率是很容易的,只要另外增加处理过程即可,不需要改变代码,也不需要调节参数。
  • 削峰: 在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流 并不常见。如果以能处理这类峰值为标准而投入资源,无疑是巨大的浪费 使用消息中间件能够使关键组件支撑突发访问压力,不会因为突发的超负荷请求而完全崩潰。
  • 可恢复性: 当系统一部分组件失效时,不会影响到整个系统,消息中间件降低了进程间的稿合度,所以即使处理消息的进程挂掉,加入消息中间件中的消息仍然可以在系统恢复后进行处理。
  • 顺序保证: 在大多数使用场景下,数据处理的顺序很重要,大部分消息中间件支持一定程度上的顺序性。
  • 缓冲: 在任何重要的系统中,都会存在需要不同处理时间的元素。消息中间件通过 个缓冲层来帮助任务最高效率地执行,写入消息中间件的处理会尽可能快速,该缓冲层有助于控制和优化数据流经过系统的速度。
  • 异步通信: 在很多时候应用不想也不需要立即处理消息 消息中间件提供了异步处理机制,允许应用把 些消息放入消息中间件中,但并不立即处理它,在之后需要的时候再慢慢处理。

3.RabbitMQ 的安装及简单使用

RabbitMQ 是由 Erlang 语言编写的 也正因如此 在安装 RabbitMQ 之前需要安装 Erlang 。

安装Erlang(以Linux环境下为例)

新建文件夹,将 Erlang 与 RabbitMQ 安装到一起,执行如下命令

1
2
3
cd /usr/local/src/ //进入此目录下
mkdir rabbitmq //创建文件夹
cd rabbitmq //进入新创建的文件夹

修改 rabbitmq-erlang.repo 文件中的内容:

1
vi /etc/yum.repos.d/rabbitmq-erlang.repo

内容如下:(可以看出是安装的21x版本的 Erlang)

1
2
3
4
5
6
7
[rabbitmq-erlang] 
name=rabbitmq-erlang
baseurl=https://dl.bintray.com/rabbitmq-erlang/rpm/erlang/21/el/7
gpgcheck=1
gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
repo_gpgcheck=0
enabled=1
  1. 安装 Erlang
    1
    sudo yum install erlang
    验证是否安装成功,输入命令:erl

安装 RabbitMQ(以Linux环境下为例)

  1. 将下载的安装包上传到上边创建的rabbitmq目录下,执行如下命令

    1
    2
    rpm --import https://www.rabbitmq.com/rabbitmq-signing-key-public.asc
    yum install rabbitmq-server-3.6.1-1.noarch.rpm//选择自己的包进行安装
  2. 常用的 rabbitMQ 命令

    1
    2
    3
    4
    5
    启动:systemctl start rabbitmq-server
    停止:service rabbitmq-server stop
    重启:service rabbitmq-server restart
    开机自动启动:systemctl enable rabbitmq-server
    查看 rabbitmq-server 状态:rabbitmqctl status
  3. 设置配置文件

    1
    2
    3
    cd /etc/rabbitmq
    cp /usr/share/doc/rabbitmq-server-3.4.1/rabbitmq.config.example /etc/rabbitmq/
    mv rabbitmq.config.example rabbitmq.config
  4. 开启用户远程访问

    1
    2
    3
    4
    5
    vi /etc/rabbitmq/rabbitmq.config

    %% Uncomment the following line if you want to allow access to the
    %% guest user from anywhere on the network.
    %% {loopback_users, []} //注意要去掉后面的逗号。
  5. 开启web界面管理工具

    1
    2
    rabbitmq-plugins enable rabbitmq_management
    service rabbitmq-server restart

    可以在本机浏览器输入 http://localhost:15672 访问 rabbitmq 主页,账户 guest 密码 guest

  6. 防火墙开放15672端口

    1
    /sbin/iptables -I INPUT -p tcp --dport 15672 -j ACCEPT

    注:关闭虚拟机centos的防火墙

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
一、对于centos7自带的防火墙的相关指令 
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
systemctl status firewalld.service #查看firewall的状态
二、iptables防火墙的相关状态
关闭虚拟机防火墙:
关闭命令: service iptables stop
永久关闭防火墙:chkconfig iptables off
两个命令同时运行,运行完成后查看防火墙关闭状态
service iptables status
1 关闭防火墙: service iptables stop
2 启动防火墙: service iptables start
3 重启防火墙: service iptables restart
4 查看防火墙状态: service iptables status
5 永久关闭防火墙: chkconfig iptables off
6 永久关闭后启用: chkconfig iptables on
  1. 简单配置 RabbitMQ
  • 添加自定义用户名为 “admin” 以及密码为 “123456” 的管理员账号: 执行命令 rabbitmqctl add_user admin 123456
    给 admin 账号设置为管理员:执行命令 rabbitmqctl set_user_tags admin administrator
    给 admin 账号授权:执行命令 rabbitmqctl set_permissions -p / admin “.“ “.“ “.*”
  • 查看 admin 账户的权限: 执行命令 rabbitmqctl list_user_permissions admin
    日志文件以及配置文件的位置
    日志文件在:$RABBITMQ_LOG_BASE/$RABBITMQ_NODENAME.log下面,一般 $RABBITMQ_LOG_BASE=$RABBITMQ_HOME/var/log/rabbitmq。一般默认日志文件会在/var/log/rabbitmq文件下.
    该日志文件的开始部分记录了rabbitmq 启动时查找相关文件的记录,例如:
1
2
3
4
5
6
7
node           : rabbit@macvm
home dir : /var/lib/rabbitmq
config file(s) : (none)
cookie hash : jzIB5AXnFFYHzF/o4qC9sw==
log(s) : /var/log/rabbitmq/rabbit@macvm.log
: /var/log/rabbitmq/rabbit@macvm_upgrade.log
database dir : /var/lib/rabbitmq/mnesia/rabbit@macvm

日志记录显示了各个系统文件对应的位置。