Spring Boot异步任务、异步消息

这篇具有很好参考价值的文章主要介绍了Spring Boot异步任务、异步消息。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.异步任务

1.1.概述

1.2.使用

2.异步消息

2.1.概述

2.2.使用


1.异步任务

1.1.概述

举一个例子,我现在有一个网上商城,客户在界面点击下单后,后台需要完成两步:

  • 1.创建客户订单

  • 2.发短信通知客户订单号

这里面第2步是个高耗时的操作,如果全部挤在一条主线程里做,效果就会是客户点了一下界面的下单按钮,然后转半天圈,直到客户收到短信后,界面才停止转圈。

这里面我们发现其实我们并不需要等第2步完全跑完再返回,只要调用触发低2步就可以返回了。

第2步很适合做成异步任务,只要触发了就行,快速给出响应,不让请求卡在接口上,不必等它完整做完。

1.2.使用

spring提供了一个AsyncConfigurer接口,用来支持我们自定义一个线程池作为异步任务的线程池。

1.AsyncConfigurer接口:

package org.springframework.scheduling.annotation;

import java.util.concurrent.Executor;
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.lang.Nullable;

public interface AsyncConfigurer {
	//获取线程池
    @Nullable
    default Executor getAsyncExecutor() {
        return null;
    }
    
	//异步异常处理器
    @Nullable
    default AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
        return null;
    }
}

2.自定义一个异步线程池:

@Configuration
@EnableAsync //开启Spring对异步的支持
public class AsyncConfig implements AsyncConfigurer {
    @Override
    public Executor getAsyncExecutor() {
        //定义线程池
        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
        //核心线程数
        taskExecutor.setCorePoolSize(10);
        //线程池最大线程数
        taskExecutor.setMaxPoolSize(30);
        //线程队列最大线程数
        taskExecutor.setQueueCapacity(2000);
        //初始化
        taskExecutor.initialize();
        return taskExecutor;
    }
}

3.使用异步任务:

用@Async注解的方法会交给自定义的异步线程池来执行。

@Async注解的接口只要将任务交给线程池里面的线程后就会快速返回响应,而不会等方法执行完。

import org.springframework.scheduling.annotation.Async;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @RequestMapping("test")
    @Async
    public void test(){
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(Thread.currentThread().getName());
    }
}

2.异步消息

2.1.概述

有时候,点对点的消息传送可能出现消费能力跟不上生产能力导致数据积压的情况出现,这时候异步消息就派上了用场。

以1.1章节中举例的场景为例,发短信的线程和客户之间就是点对点的,只要订单下得够快,线程池很快还是会被打满:

Spring Boot异步任务、异步消息

 这时候我们就需要将这种点对点的同步关系,通过MQ这个中间层解为异步的关系:

Spring Boot异步任务、异步消息

2.2.使用

异步消息其实本质上就是将数据放到MQ中,以下是博主写的用Spring Boot操作rabbitMQ的文章,清晰易懂,可以参考,至于其它MQ的话,术有千法,道本归一:

SpringBoot RabbitMq 六大模式_springboot整合rabbitmq六种模式__BugMan的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-421780.html

到了这里,关于Spring Boot异步任务、异步消息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot实现对超大文件进行异步压缩下载

     在Web应用中,文件下载功能是一个常见的需求,特别是当你需要提供用户下载各种类型的文件时。本文将演示如何使用Spring Boot框架来实现一个简单而强大的文件下载功能。我们将创建一个RESTful API,通过该API,用户可以下载问价为ZIP压缩文件。 首先,确保你已经创建了一个

    2024年02月07日
    浏览(54)
  • 【Spring云原生系列】Spring RabbitMQ:异步处理机制的基础--消息队列 原理讲解+使用教程

    🎉🎉 欢迎光临,终于等到你啦 🎉🎉 🏅我是 苏泽 ,一位对技术充满热情的探索者和分享者。🚀🚀 🌟持续更新的专栏 《Spring 狂野之旅:从入门到入魔》 🚀 本专栏带你从Spring入门到入魔   这是苏泽的个人主页可以看到我其他的内容哦👇👇 努力的苏泽 http://suzee.blog.

    2024年03月15日
    浏览(52)
  • Spring Boot定时任务

    目录 1.概述 2.Spring Boot定时任务 2.1.快速使用 2.2.cron表达式 3.业务示例 3.1.业务描述 3.2.业务实现 4.实现原理 5.自定义线程池 在某些业务场景中,需要定时执行一些任务,有可能是定时统计然后生成报表,有可能是定时发起一个任务。最近在工作中就正好遇见一个定时发起问卷

    2024年02月07日
    浏览(49)
  • Spring boot开启定时任务

       使用@Scheduled 注解很方便,但缺点是当我们调整了执行周期的时候,需要重启应用才能生效,这多少有些不方便。为了达到实时生效的效果,那么可以使用接口来完成定时任务,统一将定时器信息存放在数据库中。 1. 在mysql中执行一下脚本插入定时任务: 2. Mapper层 3. 

    2024年02月10日
    浏览(37)
  • Spring Boot使用@Async实现异步调用:自定义线程池

    第一步,先在Spring Boot主类中定义一个线程池,比如: 上面我们通过使用​​ ThreadPoolTaskExecutor ​​创建了一个线程池,同时设置了以下这些参数: 核心线程数10:线程池创建时候初始化的线程数 最大线程数20:线程池最大的线程数,只有在缓冲队列满了之后才会申请超过核

    2024年02月14日
    浏览(50)
  • spring-boot定时任务

    定时任务规则:0  *  *  * ? *  * 表示任意月的任意周的每天的每时的每分的0秒开始一次任务。 任务加在方法上  开始一次任务 表示 启动 一次方法。 0/5 *  *  5  *  4  表示 每月的最后一周的第五天的任意时任意分的0秒开始 每隔5秒启动一次任务。 定时任务表达式 还有很

    2024年01月21日
    浏览(57)
  • 解密Spring Boot的定时任务

    大家好!欢迎来到本篇博客,今天我们将深入探讨Spring Boot中的定时任务,以及它在单线程和多线程环境下的运行机制。本文将详细解析定时任务的工作原理,并附带实际案例进行演示。 1. Spring Boot定时任务的基本概念 Spring Boot的定时任务是基于Quartz Scheduler实现的,它允许您

    2024年01月19日
    浏览(48)
  • Spring Boot动态设置定时任务

            spring boot项目实现定时任务,最简单的一种就是基于注解 @Schedule 的方式,在启动类上添加 @EnableScheduling 注解进行标注,就可实现。但是,这个方式有个缺点,那就是执行周期写死在代码里,无法动态改变,想要改变只能修改代码再重新部署启动。为了能够动态的

    2024年02月08日
    浏览(46)
  • Spring Boot 面试题——定时任务

    (1)定时任务是一种 在指定的时间点或时间间隔内自动触发执行的任务 。它能够周期性地执行一些重复性、时间敏感或计划性的操作,而无需人工干预。定时任务的需求主要有以下几个方面: 自动化 :定时任务可以实现某些操作的自动化,无需人工手动执行。这可以提高

    2024年02月08日
    浏览(44)
  • 【SpringBoot】| Spring Boot 概述和入门程序剖析

    目录 一:Spring Boot 入门 1. Spring能做什么? 2. SpringBoot特点 3. 如何学习SpringBoot 4. 创建Spring Boot项目 Maven的配置 入门案例: SpringBoot中几个重要的注解 5. 了解自动配置原理 依赖管理 自动配置 6. SpringBoot核心配置文件 多环境测试 自定义配置 7. SpringBoot中使用JSP(了解) 8. S

    2024年02月06日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包