博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RabbitMQ + Quartz +Swagger 使用记录
阅读量:5964 次
发布时间:2019-06-19

本文共 4991 字,大约阅读时间需要 16 分钟。

1、RabbitMQ概述

1、官方解释

RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而群集和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。

Erlang是一种通用的面向并发的编程语言,它由瑞典电信设备制造商爱立信所辖的CS-Lab开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境。

2、个人理解

1、应用场景

同步请求过程中当遇到大规模并发时由于遇到DB吞吐瓶颈或遇到模块负载过高时,此时将会产生系统响应阻塞影响用户体验。

使用消息队列后当遇到大规模并发时直接判断库存是否足够后直接反馈成功失败信息,将耗时的DB读写操作放入消息队列中,由RabbitMQ下发消息给消息消费者异步处理。这样就避开耗时的DB操作给与用户及时的信息反馈增加用户体验。

2、疑惑点

RabbitMQ 就是一个高并发消息队列,当看到消息队列的时候就想到了redis也能实现消息队列呀,参考了一些其他博客发现这两者还是有些区别的。

3、简单使用

1、使用docker-compose 安装RabbitMQ

version: '3.1'services:  rabbitmq:    restart: always    image: rabbitmq:management    container_name: rabbitmq    ports:      #服务端口      - 5672:5672      #web页端口      - 15672:15672    environment:      RABBITMQ_DEFAULT_USER: rabbit      RABBITMQ_DEFAULT_PASS: 123456    volumes:      - ./data:/var/lib/rabbitmq复制代码

RabbitMQ web管理端地址 http:/ip:15672

2、spring boot 集成rabbitMQ

1、pom.xml

org.springframework.boot
spring-boot-starter-amqp
复制代码

2、yml配置连接RabbitMQ

spring:    rabbitmq:        host: 119.3.252.69        port: 5672        username: rabbit        password: 123456复制代码

3、使用bean配置创建一个消息队列

@Configurationpublic class RabbitMQConfig {    /**     * 创建一个消息队列     * @return     */    @Bean    public Queue queue(){        //创建名称为testRabbitQueue的消息队列        return new Queue("testRabbitQueue");    }}复制代码

4、创建消息生产者

/** * 消息生产者 */@RestControllerpublic class RabbitQMController {    @Autowired    private AmqpTemplate amqpTemplate;    @RequestMapping(value = "sendMQ",method = RequestMethod.POST)    public String sendMQ(String message){        //将消息放入队列        amqpTemplate.convertAndSend("testRabbitQueue", message);        return "send"+message+"成功";    }}复制代码

5、创建消息消费者

/** * 消息消费者 */@Component@RabbitListener(queues = "testRabbitQueue")public class RabbitMQConsumer {    @RabbitHandler    public void process(String message){        System.out.println("我是消费者我要累死了这是消息内容-----"+message);    }}复制代码

当消息队列中有数据时会将消息下发到各个消费者手上处理

2、Quartz 概述

Quartz 是一个任务调度框架

1、简单使用

1、pom.xml

org.springframework.boot
spring-boot-starter-quartz
复制代码

2、创建定时任务

@Componentpublic class SendRabbitMQQuartz {    @Autowired    private RabbitQMController rabbitQMController;    /**     * 每分钟插入1000条消息     */    @Scheduled(cron = "0 0/1 * * * ? ")    public void sendRabbitMQ(){        for (int i=0 ; i<1000 ; i++){            rabbitQMController.sendMQ("我是消息"+i);        }        System.out.println(new SimpleDateFormat("YYYY-MM-dd HH:mm:ss").format(new Date()));    }    /**     * 每30秒打印信息     */    @Scheduled(cron = "0/30 * * * * ? ")    public void printTime(){        System.out.println(new SimpleDateFormat("YYYY-MM-dd HH:mm:ss").format(new Date()));    }}复制代码

3、启动类增加注解

@EnableScheduling

4、测试效果

3、Swagger 概述

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。

作用:

  1. 接口的文档在线自动生成。
  2. 功能测试。

1、简单使用

1、pom.xml

io.springfox
springfox-swagger2
2.8.0
io.springfox
springfox-swagger-ui
2.8.0
复制代码

2、启动类增加注解

@EnableSwagger2

3、创建bean配置类

@Configurationpublic class Swagger2Config {    @Bean    public Docket createRestApi() {        return new Docket(DocumentationType.SWAGGER_2)                .apiInfo(apiInfo())                .select()                //接口所在包路径                .apis(RequestHandlerSelectors.basePackage("com.fjhckj.springcloudrabbitmq.controller"))                .paths(PathSelectors.any())                .build();    }    private ApiInfo apiInfo() {        return new ApiInfoBuilder()                .title("rabbitMQ API 文档")                .description("rabbitMQ API 接口文档")                .version("1.0.0")                .build();    }}复制代码

4、在消息生产者接口上标注接口说明

/** * 消息生产者 *///描述类@Api(value = "RabbitMQ消息生产者")@RestControllerpublic class RabbitQMController {    @Autowired    private AmqpTemplate amqpTemplate;    //描述方法    @ApiOperation(value = "消息生成rest接口")    //描述参数    @ApiImplicitParams({        @ApiImplicitParam(name = "message", value = "消息内容", required = true, dataTypeClass = String.class, paramType = "String"),    })    @RequestMapping(value = "sendMQ",method = RequestMethod.POST)    public String sendMQ(String message){        amqpTemplate.convertAndSend("testRabbitQueue", message);        return "send"+message+"成功";    }}复制代码

@Api:用在类上,说明该类的作用。

@ApiOperation:注解来给API增加方法说明。

@ApiImplicitParams : 用在方法上包含一组参数说明。

@ApiImplicitParam:用来注解来给方法入参增加说明。

@ApiResponses:用于表示一组响应

@ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息

l   code:数字,例如400l   message:信息,例如"请求参数没填好"l   response:抛出异常的类   复制代码

@ApiModel:描述一个Model的信息(一般用在请求参数无法使用@ApiImplicitParam注解进行描述的时候)

l   @ApiModelProperty:描述一个model的属性复制代码

5、测试效果

:port/swagger-ui.html

结尾

这几个东西单纯记录下使用方式互相直接并无依赖关系。

转载于:https://juejin.im/post/5cfd2356f265da1b7e102b02

你可能感兴趣的文章
OPP Services Log
查看>>
JQuery增删改查
查看>>
android webview 全屏播放H5 (Playing HTML5 video on fullscreen in android webview)
查看>>
python的一些常用函数
查看>>
微信公众号教程(19)微信音乐播放器开发 中
查看>>
浏览器跨域问题
查看>>
部署WEB项目到服务器(二)安装tomcat到linux服务器(Ubuntu)详解
查看>>
SpringBoot之SpringBoot+Mybatis+Mysql+Maven整合
查看>>
SQLServer BI 学习笔记
查看>>
20160504-hibernate入门
查看>>
工作四周年
查看>>
sql定时自动备份(定时作业)
查看>>
Excel 2013 表格自用技巧
查看>>
ubuntu安装VNC、Xfce桌面
查看>>
浅析支付系统的整体架构
查看>>
二位数组
查看>>
unix文件权限
查看>>
Python 模拟鼠键
查看>>
2017-2018-2 20155224『网络对抗技术』Exp7:网络欺诈防范
查看>>
tomcat 搭建
查看>>