延迟队列(延迟队列):队列内部是有序的。最重要的特点体现在它的Delay属性Up
有序的
Delay
延迟队列中的元素预计在指定时间
延迟队列是用于存储需要在指定时间处理的元素
订单十分钟内未付款将自动取消 新创建的店铺十天内没有上传商品,会自动发送消息提醒 用户注册成功后,如果用户三天内没有登录,将会发送短信提醒 用户发起退款。若三天内未处理,将通知相关操作人员 预约会议后,需要在预定时间前十分钟通知每位参会者参加会议 这些场景都有一个特点,就是要求在某个事件发生之后或者之前的指定时间点完成某个任务。 例如:当发生订单生成事件时,十分钟后查看订单的支付状态,然后关闭未支付的订单;好像是用一个定时任务一直轮询数据,每秒检查一次,需要处理移除,处理完数据再处理还不够吗?如果数据量比较小,确实可以这样做。例如:对于“一周内未付款自动结算”这样的需求,如果没有严格限制时间,而是宽松意义上的一周,那么每天晚上运行一个定时任务,检查所有未付款票据确实是一个可行的解决方案。但对于数据量比较大、时效性强的场景,比如:“十分钟内未付款,订单将被关闭”。短期内可能会出现大量未支付的订单数据,甚至在活动期间达到数百万甚至数千万。 level,如此庞大的数据量,仍然使用轮询的方式显然是不可取的。很可能所有订单都无法在一秒内完成。同时会给数据库带来很大的压力,无法满足业务需求,性能低下。 。 3。集成弹簧引导 pom.xml <项目 xmlns="http://www.sychzs.cn/POM/4.0.0 ”xmlns:xsi="http://www.sychzs.cn/2001/XMLSchema-instance"xsi:schemaLocation=“http://www.sychzs.cn/POM/4.0.0 https://www.sychzs.cn/xsd/maven-4.0 .0.xsd"> <模型版本>4.0.0模型版本> <父级> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-parentartifactId> <版本>2.6.5版本> <相对路径/> 父> <groupId>com.tuwergroupId> <artifactId>springboot-rabbitmqartifactId> <版本>0.0.1-SNAPSHOT版本> <name>Springboot-rabbitmqname>spring boot description><<description>demo项目 <属性> <java.version>1.8java.version> 属性> <依赖项> <依赖性> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-amqpartifactId> 依赖> <依赖性> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-webartifactId> 依赖> <依赖性> <groupId>org.projectlombokgroupId><artifactId>lombokartifactId> <可选>true可选> 依赖> <依赖性> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-测试artifactId> <范围>测试范围> 依赖> <依赖性> <groupId>org.springframework.amqpgroupId> <artifactId>弹簧兔子测试artifactId> <范围>测试范围> 依赖> <依赖性><groupid>com.com.alibabagroupid> <artifactId>fastjsonartifactId> <版本>1.2.79版本> 依赖> <依赖性> <groupid>iio.springfoxgroupid> <artifactId>springfox-boot-starterartifactId> <版本>3.0.0版本> 依赖> 依赖项> <构建> <插件> <插件> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-maven-pluginartifactId> <配置> <排除> <排除> <groupId>org.projectlombokgroupId> <artifactId>lombokartifactId> 排除> 排除> 配置> 插件> 插件> 构建> 项目> application.yml 弹簧: rabbitmq: 主机:192.168.19.101 端口: 5672 用户名: admin 密码: 管理员 添加Swagger配置类 套件 com.tuwer.配置 ; 导入org.springframework.上下文 .注释.Bean; 导入org.springframework.上下文 .注释.配置; 导入org.springframework.web .servlet.配置.注释.EnableWebMvc; 导入springfox.文档.服务 .ApiInfo; 导入springfox.文档.服务 .联系方式; 导入springfox.文档.spi.文档类型; 导入springfox.文档.spring .web.插件.案卷;导入java.util.ArrayList ; /** * @作者托ミ儿 *日期2022年3月26日 *@版本1.0 */ @配置 @EnableWebMvc 公共 类 SwaggerConfig { /** * Placement Swagger具体参考号 * @返回 */ @Bean 公共 案卷 案卷() { 返回 新 案卷(文档类型) .OAS_30) .群组名称("webApi") .apiInfo(apiInfo()) .选择() .构建(); } /** *自定义API文本信息 * @返回 */ 私有ApiInfoapiInfo(){ //作者信息联系方式联系方式=新联系方式("乡土风味", "http : // 本地主机: 8080/", " support@www.sychzs.cn ") ; 返回 新ApiInfo( “Hello Swagger API 文档”, “路无边际,行者无疆”, "v1.0", “http://localhost:8080/”, 联系方式, “阿帕奇2.0”, “http://www.sychzs.cn/licenses/LICENSE-2.0”, 新 ArrayList()); } }
这些场景都有一个特点,就是要求在某个事件发生之后或者之前的指定时间点完成某个任务。
例如:当发生订单生成事件时,十分钟后查看订单的支付状态,然后关闭未支付的订单;好像是用一个定时任务一直轮询数据,每秒检查一次,需要处理移除,处理完数据再处理还不够吗?如果数据量比较小,确实可以这样做。例如:对于“一周内未付款自动结算”这样的需求,如果没有严格限制时间,而是宽松意义上的一周,那么每天晚上运行一个定时任务,检查所有未付款票据确实是一个可行的解决方案。但对于数据量比较大、时效性强的场景,比如:“十分钟内未付款,订单将被关闭”。短期内可能会出现大量未支付的订单数据,甚至在活动期间达到数百万甚至数千万。 level,如此庞大的数据量,仍然使用轮询的方式显然是不可取的。很可能所有订单都无法在一秒内完成。同时会给数据库带来很大的压力,无法满足业务需求,性能低下。 。
3。集成弹簧引导 pom.xml <项目 xmlns="http://www.sychzs.cn/POM/4.0.0 ”xmlns:xsi="http://www.sychzs.cn/2001/XMLSchema-instance"xsi:schemaLocation=“http://www.sychzs.cn/POM/4.0.0 https://www.sychzs.cn/xsd/maven-4.0 .0.xsd"> <模型版本>4.0.0模型版本> <父级> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-parentartifactId> <版本>2.6.5版本> <相对路径/> 父> <groupId>com.tuwergroupId> <artifactId>springboot-rabbitmqartifactId> <版本>0.0.1-SNAPSHOT版本> <name>Springboot-rabbitmqname>spring boot description><<description>demo项目 <属性> <java.version>1.8java.version> 属性> <依赖项> <依赖性> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-amqpartifactId> 依赖> <依赖性> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-webartifactId> 依赖> <依赖性> <groupId>org.projectlombokgroupId><artifactId>lombokartifactId> <可选>true可选> 依赖> <依赖性> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-测试artifactId> <范围>测试范围> 依赖> <依赖性> <groupId>org.springframework.amqpgroupId> <artifactId>弹簧兔子测试artifactId> <范围>测试范围> 依赖> <依赖性><groupid>com.com.alibabagroupid> <artifactId>fastjsonartifactId> <版本>1.2.79版本> 依赖> <依赖性> <groupid>iio.springfoxgroupid> <artifactId>springfox-boot-starterartifactId> <版本>3.0.0版本> 依赖> 依赖项> <构建> <插件> <插件> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-maven-pluginartifactId> <配置> <排除> <排除> <groupId>org.projectlombokgroupId> <artifactId>lombokartifactId> 排除> 排除> 配置> 插件> 插件> 构建> 项目> application.yml 弹簧: rabbitmq: 主机:192.168.19.101 端口: 5672 用户名: admin 密码: 管理员 添加Swagger配置类 套件 com.tuwer.配置 ; 导入org.springframework.上下文 .注释.Bean; 导入org.springframework.上下文 .注释.配置; 导入org.springframework.web .servlet.配置.注释.EnableWebMvc; 导入springfox.文档.服务 .ApiInfo; 导入springfox.文档.服务 .联系方式; 导入springfox.文档.spi.文档类型; 导入springfox.文档.spring .web.插件.案卷;导入java.util.ArrayList ; /** * @作者托ミ儿 *日期2022年3月26日 *@版本1.0 */ @配置 @EnableWebMvc 公共 类 SwaggerConfig { /** * Placement Swagger具体参考号 * @返回 */ @Bean 公共 案卷 案卷() { 返回 新 案卷(文档类型) .OAS_30) .群组名称("webApi") .apiInfo(apiInfo()) .选择() .构建(); } /** *自定义API文本信息 * @返回 */ 私有ApiInfoapiInfo(){ //作者信息联系方式联系方式=新联系方式("乡土风味", "http : // 本地主机: 8080/", " support@www.sychzs.cn ") ; 返回 新ApiInfo( “Hello Swagger API 文档”, “路无边际,行者无疆”, "v1.0", “http://localhost:8080/”, 联系方式, “阿帕奇2.0”, “http://www.sychzs.cn/licenses/LICENSE-2.0”, 新 ArrayList()); } }
<项目 xmlns="http://www.sychzs.cn/POM/4.0.0 ”xmlns:xsi="http://www.sychzs.cn/2001/XMLSchema-instance"xsi:schemaLocation=“http://www.sychzs.cn/POM/4.0.0 https://www.sychzs.cn/xsd/maven-4.0 .0.xsd"> <模型版本>4.0.0模型版本> <父级> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-parentartifactId> <版本>2.6.5版本> <相对路径/> 父> <groupId>com.tuwergroupId> <artifactId>springboot-rabbitmqartifactId> <版本>0.0.1-SNAPSHOT版本> <name>Springboot-rabbitmqname>spring boot description><<description>demo项目 <属性> <java.version>1.8java.version> 属性> <依赖项> <依赖性> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-amqpartifactId> 依赖> <依赖性> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-webartifactId> 依赖> <依赖性> <groupId>org.projectlombokgroupId><artifactId>lombokartifactId> <可选>true可选> 依赖> <依赖性> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-测试artifactId> <范围>测试范围> 依赖> <依赖性> <groupId>org.springframework.amqpgroupId> <artifactId>弹簧兔子测试artifactId> <范围>测试范围> 依赖> <依赖性><groupid>com.com.alibabagroupid> <artifactId>fastjsonartifactId> <版本>1.2.79版本> 依赖> <依赖性> <groupid>iio.springfoxgroupid> <artifactId>springfox-boot-starterartifactId> <版本>3.0.0版本> 依赖> 依赖项> <构建> <插件> <插件> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-maven-pluginartifactId> <配置> <排除> <排除> <groupId>org.projectlombokgroupId> <artifactId>lombokartifactId> 排除> 排除> 配置> 插件> 插件> 构建> 项目>
弹簧: rabbitmq: 主机:192.168.19.101 端口: 5672 用户名: admin 密码: 管理员
套件 com.tuwer.配置 ; 导入org.springframework.上下文 .注释.Bean; 导入org.springframework.上下文 .注释.配置; 导入org.springframework.web .servlet.配置.注释.EnableWebMvc; 导入springfox.文档.服务 .ApiInfo; 导入springfox.文档.服务 .联系方式; 导入springfox.文档.spi.文档类型; 导入springfox.文档.spring .web.插件.案卷;导入java.util.ArrayList ; /** * @作者托ミ儿 *日期2022年3月26日 *@版本1.0 */ @配置 @EnableWebMvc 公共 类 SwaggerConfig { /** * Placement Swagger具体参考号 * @返回 */ @Bean 公共 案卷 案卷() { 返回 新 案卷(文档类型) .OAS_30) .群组名称("webApi") .apiInfo(apiInfo()) .选择() .构建(); } /** *自定义API文本信息 * @返回 */ 私有ApiInfoapiInfo(){ //作者信息联系方式联系方式=新联系方式("乡土风味", "http : // 本地主机: 8080/", " support@www.sychzs.cn ") ; 返回 新ApiInfo( “Hello Swagger API 文档”, “路无边际,行者无疆”, "v1.0", “http://localhost:8080/”, 联系方式, “阿帕奇2.0”, “http://www.sychzs.cn/licenses/LICENSE-2.0”, 新 ArrayList()); } }