欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

RabbitMQ介绍,搭建及spring集成

时间:2023-07-02

目录

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 firewalldsystemctl disable firewalldsystemctl restart docker

3、创建目录 

mkdir /etc/rabbitmq

 4、创建配置文件,并进入编辑状态

vim /etc/rabbitmq/rabbitmq.conf

5、写入用户名与密码(配置文件及路径一会启动容器用,用户名密码登录时用) 

default_user = zlydefault_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依赖

org.springframework.boot spring-boot-starter-amqp

2.配置文件(conf.properties)

host需要根据实际情况修改

username和password是前面自己写的

spring.application.name=spirng-boot-rabbitmqspring.rabbitmq.host=192.168.126.128spring.rabbitmq.port=5672spring.rabbitmq.username=zlyspring.rabbitmq.password=zly

3.测试

1.配置类

import org.springframework.amqp.core.Queue;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic 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;@RestControllerpublic 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); }}

访问接口可以看到消息率在随之变化。

 

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。