消息队列介绍
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋、日志处理、消息通讯等问题实现高性能,高可用,可伸缩和最终一致性架构
使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ。
今天我们将会了解到在SpringBoot
中使用RabbitMQ
实现
1.1 rabbitmq简介
RabbitMQ是由Erlang语言编写的实现了高级消息队列协议(AMQP)的开源消息代理软件(也可称为 面向消息的中间件)。支持Windows、Linux/Unix、MAC OS X操作系统和包括JAVA在内的多种编程语言。
AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受 客户端/中间件 不同产品,不同的开发语言等条件的限制
使用 RabbitMQ 主要三种分发模式
1.1.1 工作队列模式(Work Queue)
避免立即做一个资源密集型任务,必须等待它完成,而是把这个任务安排到稍后再做。我们将任务封装为消息并将其发送给队列。后台运行的工作进程将弹出任务并最终执行作业。当有多个worker同时运行时,任务将在它们之间共享。
1.1.2 分发模式(Fanout Exchange)
一个生产者,多个消费者,每一个消费者都有自己的一个队列,生产者没有将消息直接发送到队列,而是发送到了交换机,每个队列绑定交换机,生产者发送的消息经过交换机,到达队列,实现一个消息被多个消费者获取的目的。需要注意的是,如果将消息发送到一个没有队列绑定的exchange上面,那么该消息将会丢失,这是因为在rabbitMQ中exchange不具备存储消息的能力,只有队列具备存储消息的能力。
1.1.3 通配符模式(Topic Exchange)
这种模式添加了一个路由键,生产者发布消息的时候添加路由键,消费者绑定队列到交换机时添加键值,这样就可以接收到需要接收的消息。
符号“#”匹配一个或多个词,符号“*”匹配不多不少一个词
1.2、安装rabbitmq
1.2.1 window
因为rabbitmq
是erlang
实现,所以我们需要先下载安装erlang
,然后再下载rabbitmq
1.2.2 mac
在mac系统中可以直接使用brew
安装,它会帮我们自动安装管理依赖。
brew update
brew install rabbitmq
这样,我们就可以使用rabbit-server
启动Rabbit服务了。
1.2.3 centos
在centos中可以使用yum
安装
sudo yum install rabbitmq
1.3 springboot整合
首先新建一个项目名为rabbit-producer 消息生产者工程
并且添加依赖。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope&g