目录
RabbitMQ是什么?
常见的消息中间件,及应用场景?
RabbitMQ的应用场景
1、服务解耦
2、流量削峰
3、异步调用
RabbitMQ安装
sprngboot集成RabbitMQ
1.pom依赖
2.配置文件(conf.properties)
3.测试
RabbitMQ是什么?
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。
常见的消息中间件,及应用场景?
Kafka、ActiveMQ、RabbitMQ、RocketMQ
ActiveMq与RabbitMq都基于主从架构并且单机吞吐量每秒万级别,RocketMq和Kafka天然支持分布式并且单机吞吐量为十万级别。ActiveMq有较低概率丢失数据,其他经过配置几乎可以0丢失,
RabbitMq有单机模式,普通集群模式,镜像集群模式,每台机器上存储着全量的数据。
RabbitMQ的应用场景
1、服务解耦
如果一个服务下面有几十甚至几百个对接服务,那么这个服务代码维护起来会比较费力,造成这个现象的原因是耦合度太高了,如果使用rabbitMQ解耦,下游服务如果需要数据,自行从消息服务器订阅消息,不再需要数据时则取消订阅即可。
2、流量削峰
如果一个服务平时访问量不多,偶尔访问量会暴增到单台服务器无法处理,这种情况就可以使用RabbitMQ来进行流量削峰,减轻瞬时压力。
3、异步调用
比如秒杀系统,用户并不关心自己的订单号是否会立即返回,用户只关心自己是否成功抢购,所以对于生成订单号,减少库存等操作我们可以通过异步处理订单将数据写入数据库。
RabbitMQ安装
由于使用docker启动Rabbitmq十分便捷,这里就不再叙述其他方法了。
1、拉取最新版镜像(rabbitmq:management中有管理界面)
docker pull rabbitmq:management
2、关闭,禁用防火墙,重启 docker 系统服务
systemctl stop firewalld
systemctl disable firewalld
systemctl restart docker
3、创建目录
mkdir /etc/rabbitmq
4、创建配置文件,并进入编辑状态
vim /etc/rabbitmq/rabbitmq.conf
5、写入用户名与密码(配置文件及路径一会启动容器用,用户名密码登录时用)
default_user = zly
default_pass = zly
6、启动Rabbitmq
-d:后台运行容器。
--name:指定容器名。
-p:指定服务运行的端口(5672:应用访问端口;15672:控制台端口号)。
-v:映射目录或文件。
-e:指定环境变量
docker run -d --name rabbit \
-p 5672:5672 \
-p 15672:15672 \
-v /etc/rabbitmq/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \
-e RABBITMQ_CONFIG_FILE=/etc/rabbitmq/rabbitmq.conf \
--restart=always \
rabbitmq:management
访问15672端口,输入之前设置的用户名与密码就可以访问了(5672是集成到spring中写配置里的)
RabbitMQ工作模式
大家可以点击到官网查看RabbitMQ Tutorials — RabbitMQ
sprngboot集成RabbitMQ
1.pom依赖
2.配置文件(conf.properties)
host需要根据实际情况修改
username和password是前面自己写的
spring.application.name=spirng-boot-rabbitmq
spring.rabbitmq.host=192.168.126.128
spring.rabbitmq.port=5672
spring.rabbitmq.username=zly
spring.rabbitmq.password=zly
3.测试
1.配置类
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitMqConfig {
@Bean
public Queue Queue1() {
return new Queue("zly");
}
}
2.接口
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
@RestController
public class SendController {
@Autowired
private AmqpTemplate amqpTemplate;
@RequestMapping("/send")
public String send(){
String content="Date:"+new Date();
amqpTemplate.convertAndSend("zly",content);
return content;
}
}
3.监听
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
@RabbitListener(queues = "zly")
public class Receiver1 {
private static final Logger logger = LoggerFactory.getLogger(Receiver1.class);
@RabbitHandler
public void receiver(String msg){
logger.debug("zly:"+msg);
}
}
访问接口可以看到消息率在随之变化。
好文阅读
发表评论