国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring Boot異步任務、異步消息

這篇具有很好參考價值的文章主要介紹了Spring Boot異步任務、異步消息。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

1.異步任務

1.1.概述

1.2.使用

2.異步消息

2.1.概述

2.2.使用


1.異步任務

1.1.概述

舉一個例子,我現(xiàn)在有一個網(wǎng)上商城,客戶在界面點擊下單后,后臺需要完成兩步:

  • 1.創(chuàng)建客戶訂單

  • 2.發(fā)短信通知客戶訂單號

這里面第2步是個高耗時的操作,如果全部擠在一條主線程里做,效果就會是客戶點了一下界面的下單按鈕,然后轉(zhuǎn)半天圈,直到客戶收到短信后,界面才停止轉(zhuǎn)圈。

這里面我們發(fā)現(xiàn)其實我們并不需要等第2步完全跑完再返回,只要調(diào)用觸發(fā)低2步就可以返回了。

第2步很適合做成異步任務,只要觸發(fā)了就行,快速給出響應,不讓請求卡在接口上,不必等它完整做完。

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();
        //核心線程數(shù)
        taskExecutor.setCorePoolSize(10);
        //線程池最大線程數(shù)
        taskExecutor.setMaxPoolSize(30);
        //線程隊列最大線程數(shù)
        taskExecutor.setQueueCapacity(2000);
        //初始化
        taskExecutor.initialize();
        return taskExecutor;
    }
}

3.使用異步任務:

用@Async注解的方法會交給自定義的異步線程池來執(zhí)行。

@Async注解的接口只要將任務交給線程池里面的線程后就會快速返回響應,而不會等方法執(zhí)行完。

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.概述

有時候,點對點的消息傳送可能出現(xiàn)消費能力跟不上生產(chǎn)能力導致數(shù)據(jù)積壓的情況出現(xiàn),這時候異步消息就派上了用場。

以1.1章節(jié)中舉例的場景為例,發(fā)短信的線程和客戶之間就是點對點的,只要訂單下得夠快,線程池很快還是會被打滿:

Spring Boot異步任務、異步消息

?這時候我們就需要將這種點對點的同步關(guān)系,通過MQ這個中間層解為異步的關(guān)系:

Spring Boot異步任務、異步消息

2.2.使用

異步消息其實本質(zhì)上就是將數(shù)據(jù)放到MQ中,以下是博主寫的用Spring Boot操作rabbitMQ的文章,清晰易懂,可以參考,至于其它MQ的話,術(shù)有千法,道本歸一:

SpringBoot RabbitMq 六大模式_springboot整合rabbitmq六種模式__BugMan的博客-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-421780.html

到了這里,關(guān)于Spring Boot異步任務、異步消息的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • Spring Boot實現(xiàn)對超大文件進行異步壓縮下載

    Spring Boot實現(xiàn)對超大文件進行異步壓縮下載

    ?在Web應用中,文件下載功能是一個常見的需求,特別是當你需要提供用戶下載各種類型的文件時。本文將演示如何使用Spring Boot框架來實現(xiàn)一個簡單而強大的文件下載功能。我們將創(chuàng)建一個RESTful API,通過該API,用戶可以下載問價為ZIP壓縮文件。 首先,確保你已經(jīng)創(chuàng)建了一個

    2024年02月07日
    瀏覽(24)
  • 【Spring云原生系列】Spring RabbitMQ:異步處理機制的基礎(chǔ)--消息隊列 原理講解+使用教程

    【Spring云原生系列】Spring RabbitMQ:異步處理機制的基礎(chǔ)--消息隊列 原理講解+使用教程

    ???? 歡迎光臨,終于等到你啦 ???? ??我是 蘇澤 ,一位對技術(shù)充滿熱情的探索者和分享者。???? ??持續(xù)更新的專欄 《Spring 狂野之旅:從入門到入魔》 ?? 本專欄帶你從Spring入門到入魔 ? 這是蘇澤的個人主頁可以看到我其他的內(nèi)容哦???? 努力的蘇澤 http://suzee.blog.

    2024年03月15日
    瀏覽(30)
  • Spring Boot定時任務

    Spring Boot定時任務

    目錄 1.概述 2.Spring Boot定時任務 2.1.快速使用 2.2.cron表達式 3.業(yè)務示例 3.1.業(yè)務描述 3.2.業(yè)務實現(xiàn) 4.實現(xiàn)原理 5.自定義線程池 在某些業(yè)務場景中,需要定時執(zhí)行一些任務,有可能是定時統(tǒng)計然后生成報表,有可能是定時發(fā)起一個任務。最近在工作中就正好遇見一個定時發(fā)起問卷

    2024年02月07日
    瀏覽(30)
  • Spring boot開啟定時任務

    ?? 使用@Scheduled 注解很方便,但缺點是當我們調(diào)整了執(zhí)行周期的時候,需要重啟應用才能生效,這多少有些不方便。為了達到實時生效的效果,那么可以使用接口來完成定時任務,統(tǒng)一將定時器信息存放在數(shù)據(jù)庫中。 1.?在mysql中執(zhí)行一下腳本插入定時任務: 2. Mapper層 3.?

    2024年02月10日
    瀏覽(24)
  • Spring Boot使用@Async實現(xiàn)異步調(diào)用:自定義線程池

    第一步,先在Spring Boot主類中定義一個線程池,比如: 上面我們通過使用?? ThreadPoolTaskExecutor ??創(chuàng)建了一個線程池,同時設(shè)置了以下這些參數(shù): 核心線程數(shù)10:線程池創(chuàng)建時候初始化的線程數(shù) 最大線程數(shù)20:線程池最大的線程數(shù),只有在緩沖隊列滿了之后才會申請超過核

    2024年02月14日
    瀏覽(26)
  • 解密Spring Boot的定時任務

    大家好!歡迎來到本篇博客,今天我們將深入探討Spring Boot中的定時任務,以及它在單線程和多線程環(huán)境下的運行機制。本文將詳細解析定時任務的工作原理,并附帶實際案例進行演示。 1. Spring Boot定時任務的基本概念 Spring Boot的定時任務是基于Quartz Scheduler實現(xiàn)的,它允許您

    2024年01月19日
    瀏覽(36)
  • Spring Boot 面試題——定時任務

    (1)定時任務是一種 在指定的時間點或時間間隔內(nèi)自動觸發(fā)執(zhí)行的任務 。它能夠周期性地執(zhí)行一些重復性、時間敏感或計劃性的操作,而無需人工干預。定時任務的需求主要有以下幾個方面: 自動化 :定時任務可以實現(xiàn)某些操作的自動化,無需人工手動執(zhí)行。這可以提高

    2024年02月08日
    瀏覽(21)
  • spring-boot定時任務

    spring-boot定時任務

    定時任務規(guī)則:0? *? *? * ? *? * 表示任意月的任意周的每天的每時的每分的0秒開始一次任務。 任務加在方法上? 開始一次任務 表示 啟動?一次方法。 0/5 *? *? 5? *? 4? 表示 每月的最后一周的第五天的任意時任意分的0秒開始 每隔5秒啟動一次任務。 定時任務表達式 還有很

    2024年01月21日
    瀏覽(32)
  • Spring Boot動態(tài)設(shè)置定時任務

    Spring Boot動態(tài)設(shè)置定時任務

    ??????? spring boot項目實現(xiàn)定時任務,最簡單的一種就是基于注解 @Schedule 的方式,在啟動類上添加 @EnableScheduling 注解進行標注,就可實現(xiàn)。但是,這個方式有個缺點,那就是執(zhí)行周期寫死在代碼里,無法動態(tài)改變,想要改變只能修改代碼再重新部署啟動。為了能夠動態(tài)的

    2024年02月08日
    瀏覽(20)
  • 【SpringBoot】| Spring Boot 概述和入門程序剖析

    【SpringBoot】| Spring Boot 概述和入門程序剖析

    目錄 一:Spring Boot 入門 1. Spring能做什么? 2. SpringBoot特點 3. 如何學習SpringBoot 4.?創(chuàng)建Spring Boot項目 Maven的配置 入門案例: SpringBoot中幾個重要的注解 5. 了解自動配置原理 依賴管理 自動配置 6.?SpringBoot核心配置文件 多環(huán)境測試 自定義配置 7.?SpringBoot中使用JSP(了解) 8.?S

    2024年02月06日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包