RabbitMQ + Quartz +Swagger 使用记录

栏目: 后端 · 发布时间: 5年前

内容简介:RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而群集和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。Erlang是一种通用的面向并发的编程语言,它由瑞典电信设备制造商爱立信所辖的CS-Lab开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境。同步请求过程中当遇到大规模并发时由于遇到DB吞吐瓶颈或遇到模块负载过高时,此时将会产生系统响应阻塞影响用户体验。

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

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

2、个人理解

1、应用场景

RabbitMQ + Quartz +Swagger 使用记录

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

RabbitMQ + Quartz +Swagger 使用记录

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

更多应用场景

2、疑惑点

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

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

RabbitMQ + Quartz +Swagger 使用记录

2、spring boot 集成rabbitMQ

1、pom.xml

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
复制代码

2、yml配置连接RabbitMQ

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

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

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

4、创建消息生产者

/**
 * 消息生产者
 */
@RestController
public 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

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-quartz</artifactId>
      </dependency>
复制代码

2、创建定时任务

@Component
public 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()));
    }


}
复制代码

cron表达式在线生成器

3、启动类增加注解

@EnableScheduling

4、测试效果

RabbitMQ + Quartz +Swagger 使用记录
RabbitMQ + Quartz +Swagger 使用记录

3、Swagger 概述

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

作用:

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

1、简单使用

1、pom.xml

<dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.8.0</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.8.0</version>
    </dependency>
复制代码

2、启动类增加注解

@EnableSwagger2

3、创建bean配置类

@Configuration
public 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消息生产者")
@RestController
public 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:数字,例如400

l   message:信息,例如"请求参数没填好"

l   response:抛出异常的类   
复制代码

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

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

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

流畅的Python

流畅的Python

[巴西] Luciano Ramalho / 安道、吴珂 / 人民邮电出版社 / 2017-5-15 / 139元

【技术大咖推荐】 “很荣幸担任这本优秀图书的技术审校。这本书能帮助很多中级Python程序员掌握这门语言,我也从中学到了相当多的知识!”——Alex Martelli,Python软件基金会成员 “对于想要扩充知识的中级和高级Python程序员来说,这本书是充满了实用编程技巧的宝藏。”——Daniel Greenfeld和Audrey Roy Greenfeld,Two Scoops ......一起来看看 《流畅的Python》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

SHA 加密
SHA 加密

SHA 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具