Rabbitmq
官网:
https://rabbitmq.com/install-homebrew.html
安装
brew install rabbitmq
#查看版本信息,及安装位置
brew info rabbitmq
#配置环境变量
open -e ~/.zshrc
#添加如下内容
export PATH=/opt/homebrew/Cellar/rabbitmq/3.12.13/sbin:$PATH
rabbitmq命令
# 启动服务
sudo rabbitmq-server
# rabbitmq 后台启动命令
sudo rabbitmq-server -detached
# 关闭服务
sudo rabbitmqctl stop
# 查询rabbitmq的状态
sudo rabbitmqctl status
# 启动插件
sudo rabbitmq-plugins enable rabbitmq_management
# 查找rabbitmq在哪
find / -name 'rabbitmq' -type d
# rabbitmq内存限制
# 系数计算,假设机器内存32g,以下命令限制的最高内存为,32*0.06=1.92g
rabbitmqctl set_vm_memory_high_watermark 0.06
# rabbitmq添加消息日志记录
rabbitmq-plugins enable rabbitmq_tracing
# 查询rabbitmq的进程
ps -ef | grep rabbitmq
# 杀掉rabbitmq进程
ps -ef | grep rabbitmq | grep -v grep | awk '{print $2}' | xargs kill -9
登陆rabbitmq
成功启动服务后,使用以下链接访问主页,则会进入到登陆页面
访问rabbitmq主页
http://localhost:15672/
guest/guest
springboot整合rabbitmq
更换Spring initializr的源为阿里云https://start.aliyun.com/
更阿里源换后可选择java8版本
maven坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
配置文件
一般需要创建一个公共项目common,共享一些配置,比如队列主题,交换机名称,路由匹配键名称等等。
消息队列
消息指的是两个应用间传递的数据。数据的类型有很多种形式,可能只包含文本字符串,也可能包含嵌入对象。
“消息队列(Message Queue)”是在消息的传输过程中保存消息的容器。在消息队列中,通常有生产者和消费者两个角色。生产者只负责发送数据到消息队列,谁从消息队列中取出数据处理,他不管。消费者只负责从消息队列中取出数据处理,他不管这是谁发送的数据。
消息队列作用
解耦。假设有系统B、C、D都需要系统A的数据,于是系统A调用三个方法发送数据到B、C、D。这时,系统D不需要了,那就需要在系统A把相关的代码删掉。假设这时有个新的系统E需要数据,这时系统A又要增加调用系统E的代码。为了降低这种强耦合,就可以使用MQ,系统A只需要把数据发送到MQ,其他系统如果需要数据,则从MQ中获取即可。
异步。一个客户端请求发送进来,系统A会调用系统B、C、D三个系统,同步请求的话,响应时间就是系统A、B、C、D的总和,也就是800ms。如果使用MQ,系统A发送数据到MQ,然后就可以返回响应给客户端,不需要再等待系统B、C、D的响应,可以大大地提高性能。对于一些非必要的业务,比如发送短信,发送邮件等等,就可以采用MQ。
削峰。这其实是MQ一个很重要的应用。假设系统A在某一段时间请求数暴增,有5000个请求发送过来,系统A这时就会发送5000条SQL进入MySQL进行执行,MySQL对于如此庞大的请求当然处理不过来,MySQL就会崩溃,导致系统瘫痪。如果使用MQ,系统A不再是直接发送SQL到数据库,而是把数据发送到MQ,MQ短时间积压数据是可以接受的,然后由消费者每次拉取2000条进行处理,防止在请求峰值时期大量的请求直接发送到MySQL导致系统崩溃。
RabbitMQ的特点
RabbitMQ是一款使用Erlang语言开发的,实现AMQP(高级消息队列协议)的开源消息中间件。首先要知道一些RabbitMQ的特点,官网可查:
可靠性。支持持久化,传输确认,发布确认等保证了MQ的可靠性。
灵活的分发消息策略。这应该是RabbitMQ的一大特点。在消息进入MQ前由Exchange(交换机)进行路由消息。分发消息策略有:简单模式、工作队列模式、发布订阅模式、路由模式、通配符模式。
支持集群。多台RabbitMQ服务器可以组成一个集群,形成一个逻辑Broker。
多种协议。RabbitMQ支持多种消息队列协议,比如 STOMP、MQTT 等等。
支持多种语言客户端。RabbitMQ几乎支持所有常用编程语言,包括 Java、.NET、Ruby 等等。
可视化管理界面。RabbitMQ提供了一个易用的用户界面,使得用户可以监控和管理消息 Broker。
插件机制。RabbitMQ提供了许多插件,可以通过插件进行扩展,也可以编写自己的插件。