目录

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依赖

org.springframework.boot

spring-boot-starter-amqp

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);

}

}

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

 

好文阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: