- 一、MQ简介
- 二、RabbitMQ 简介
- 三、RabbitMQ 的安装和配置
- 1、安装
- 2、配置
- 四、spring项目中使用RabbitMQ
- 1、生产者producer项目 :
- 2、消费者consumer项目:
- 五、补充
MQ:全称是MessageQueue,消息队列。
在两个系统中间传递消息,从而满足一些业务需求,
它对我们总体架构的作用有:
解耦:提高系统容错性和可维护性
异步:提升用户体验和系统吞吐量
削峰:提高系统稳定性
常用的MQ产品包括Kafka、RabbitMQ和RocketMQ。我们对这三个产品做下简单的比较。
| MQ | 优点 | 缺点 |
|---|---|---|
| Kafka | 吞吐量大,性能好,集群高可用 | 会丢数据,功能单一 |
| RabbitMQ | 消息可靠性高,功能全面 | 吞吐量比较低,消息积累会影响性能 |
| RocketMQ | 高吞吐,高性能,高可用,功能全面 | 客户端只支持JAVA |
RabbitMQ有着很高的消息可靠性,所以被广泛应用在金融、银行相关的系统中。
二、RabbitMQ 简介RabbitMQ 采用 Erlang 语言开发。
RabbitMQ的相关概念:
Broker :接收和分发消息的应用
Virtual host :虚拟主机
Connection : 连接
Channel : 每个线程创建单独的 channel 进行通讯连接,减少建立连接的开销
Exchange : 交换机,message 到达 broker 的第一站
Queue : 队列,消息最终被送到这里等待 consumer 取走
Binding : 设置不同的 routing key ,用于 message 的指定分发
从图中更容易去理解它的概念,
下面是它的结构图:
RabbitMQ 提供了 6 种工作模式:
- Hello World 简单模式、
- Work queues、
- Publish/Subscribe 发布与订阅模式、
- Routing 路由模式、
- Topics 主题模式、
RPC 远程调用模式(远程调用,不太算 MQ;暂不作介绍)
本次安装以CentOS7的系统为例
1、去官网下载软件包: 有三个文件
erlang18.31.el7.centos.x86_64.rpm socat1.7.3.25.el7.lux.x86_64.rpm rabbitmqserver3.6.51.noarch.rpm
2、安装Erlang
#安装命令 rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpm
3、安装RabbitMQ包
#安装命令 rpm -ivh socat-1.7.3.2-1.1.el7.x86_64.rpm #安装命令 rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm
4、开启管理界面及配置
# 开启管理界面 rabbitmq-plugins enable rabbitmq_management # 修改默认配置信息 vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app # 比如修改密码、配置等等,例如:loopback_users 中的 <<"guest">>,修改用户名guest
5、启动命令
# 启动 service rabbitmq-server start # 停止 service rabbitmq-server stop # 重启 service rabbitmq-server restart2、配置
RabbitMQ在安装好后,可以访问链接:http://ip地址:15672,
注意:端口号是15672,
如果使用腾讯云或者阿里云的服务器,一定记得开放 15672端口 否则无法访问。
如果你使用的本地虚拟机,执行关闭防火墙命令
#关闭防火墙 systemctl stop firewalld
访问成功后的界面: (它自带了guest/guest的 用户名和密码)
登录成功后,你可以看到它有6个导航入口。可以在 Admin栏 创建管理自定义用户。
在这里可以创建用户信息:
设置完用户名密码后,在Tags设置用户身份:
1、 超级管理员(administrator) 可登陆管理控制台,可查看所有的信息,并且可以对用户,策略(policy)进操作 。
2、 监控者(monitoring) 可登陆管理控制台,同时可以查看rabbitmq节点的相关信息(进程数,内存使用 情况,磁盘使用情况等)
3、 策略制定者(policymaker) 可登陆管理控制台, 同时可以对policy进行管理。但无法查看节点的相关信息(上 图红框标识的部分)。
4、 普通管理者(management) 仅可登陆管理控制台,无法看到节点信息,也无法对策略进行管理。
5、 其他(None) 无法登陆管理控制台,通常就是普通的生产者和消费者。
Virtual Hosts配置:
在RabbitMQ中可以虚拟消息服务器Virtual Host,每个Virtual Hosts相当于一个相对独立的RabbitMQ服务器,每个 VirtualHost之间是相互隔离的。
相当于mysql中可以有多个db数据库,每个数据库是独立的,方便业务之间的隔离。
创建Virtual Host:
点击创建好的名字,然后进入Virtual Host管理页面,设置指定的用户去管理这个Virtual Host
我在这里只介绍一下跟spring项目的集成,
RabbitMQ可以使用原生Java,也可以集成在SpringBoot中使用。
首先提前准备好两个项目,一个是生产者producer、另一个消费者consumer。
1、生产者producer项目 :1.在pom文件中 添加RabbitMQ的依赖
com.rabbitmq amqp-client5.3.0 org.springframework.amqp spring-rabbit2.0.5.RELEASE
2.配置文件
创建 spring-rabbitmq-producer.xml 文件
创建:rabbitmq.properties 文件
这个文件中设置连接RabbitMQ的相关信息
rabbitmq.host=192.168.1.167 rabbitmq.port=5672 rabbitmq.username=songpangyu rabbitmq.password=123456 rabbitmq.virtual-host=/pangyu
3.编写Java代码
public class ProducerTest {
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
public void testFanout() {
this.rabbitTemplate.convertAndSend("spring_fanout_exchange", "", "spring fanout....");
}
}
2、消费者consumer项目:
创建spring-rabbitmq-consumer.xml
也需要创建:rabbitmq.properties 文件
这个文件中设置连接RabbitMQ的相关信息
rabbitmq.host=192.168.1.167 rabbitmq.port=5672 rabbitmq.username=songpangyu rabbitmq.password=123456 rabbitmq.virtual-host=/pangyu
创建监听类,去消费消息
public class FanoutListener implements MessageListener {
@Override
public void onMessage(Message message) {
//打印消息
System.out.println(new String(message.getBody()));
}
}
五、补充
rabbitMQ提供多种工作模式 , 常见的有:
- Work queues : 多个消费者去轮询消费消息。
- Publish/Subscribe 发布与订阅模式 : 多个消费者获得相同的消息
- Routing 路由模式 : 根据routing Key 去全匹配的获取自己的消费
- Topics 主题模式: routing Key的升级版,它支持通配符。(是工作中最常用的模式)
可以在Exchanges交换机的类型中,选择模式:
RabbitMQ在搭建集群的时候,可以配合HAProxy来完成负载均衡。
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、 快速并且可靠的一种解决方案。



