RabbitMQ + Quartz +Swagger 使用记录

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

内容简介: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的属性
复制代码

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

查看所有标签

猜你喜欢:

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

PHP实战

PHP实战

Dagfinn Reiersol、Marcus Baker、Chris Shiflett / 张颖 等、段大为 审校 / 人民邮电出版社 / 2010-01 / 69.00元

“对于那些想要在PHP方面更进一步的开发者而言,此书必不可少。” ——Gabriel Malkas, Developpez.com “简而言之,这是我所读过的关于面向对象编程和PHP最好的图书。……强烈推荐此书,绝不要错过!” ——Amazon评论 “此书是理论与实践的完美融合,到目前为止,其他任何图书都无法与它相媲美。如果5颗星是满分,它完全值得10颗星!” ——A......一起来看看 《PHP实战》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码