當前位置:首頁 » 數據倉庫 » post介面怎麼配置定時任務
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

post介面怎麼配置定時任務

發布時間: 2023-03-20 23:43:35

1. Django配置Celery執行非同步和同步任務(tasks))

celery是一個基於python開發的簡單、靈活且可靠的分布式任務隊列框架,支持清弊使用任務隊列的方式在分布式的機器/進程/線程上執行任務調度。採用典型的生產者-消費者模型,主要由三部分組成:

比如系統上線前後台批量導入歷史數據,發送簡訊、發送郵件等耗時的任務

1.安裝RabbitMQ,這里我們使用RabbitMQ作為broker,安裝完成後默認啟動了,也不需要其他任何配置

Ubuntu linux安裝

CentOS Linux 安裝

蘋果mac 安裝需要配置

配置環境變數 (蘋果用戶)

啟動rabbitmq-server

2.安裝celery

3.celery用在django項目中,django項目目錄結構(簡化)如下

4.創建 oa/celery.py 主文件

5.在 oa/__init__.py 文件中增加如下內容,確保django啟動的時候這個app能夠被載入到

6.各應用創建tasks.py文件,這里為 users/tasks.py

7.views.py中引用使用這個tasks非同步處理

8.啟動celery

9.這樣在調用post這個方法時,里邊的add就可以非同步處理了

定時任務的使用場景就很普遍了,比如我需要定時發送報告給老祥談板~

1. oa/celery.py 文件添加謹正碰如下配置以支持定時任務crontab

3.啟動celery beat,celery啟動了一個beat進程一直在不斷的判斷是否有任務需要執行

2. ASP.NET如何後台定時執行任務

你可以在前台定一個計時器,定時去執行後台呀。用ajax+json可以。如果你非要在後台定時執行任務。你在後台茄沖伺服器上寫個服務也行呀。這個是前台的ajax調用後台處理程序,返回json
$(document).ready(
function(){
setTimeout(function(){

$.ajax({
type:"post",
url:"Handler1.ashx",
dataType: "json",
success: function(data) { //執明備行OK,就把消息返回到前台
$("#msg").css("color", "#0000FF").html(data.MSG);
},
error: function(err) { //失敗
$("顫槐殲#msg").css("color", "#FF0000").html("access faield:" + err);
}
});
}, 1000)
});

3. Nacos動態配置原理淺談

SpringBoot環境引入配置中心依賴

查看spring-cloud-starter-alibaba-nacos-config的spring.factories文件

首先載入初始化:org.springframework.cloud.alibaba.nacos.的NacosPropertySourceLocator對象
ps:何時載入 請參考: https://blog.csdn.net/m0_37607945/article/details/107762760 )

重點關注NacosPropertySourceLocator.locate方法

那locate方法具體什麼時候執行呢?

spring容器在初始化,准備上下文時,會調用所有實現ApplicationContextInitializer介面的類然後遍歷執行其initialize()方法

而nacos則正是利用了spring的這種自定義PropertySourceLoader載入機制與spring完美結合,說明一個好的框架的擴展性設計是多麼重要,同樣如果從事自研中間件的小夥伴也必須對spring的各種機制,功能點必須非常熟悉才能寫出優秀的框架。

接下來就回到了:NacosPropertySourceLocate的locate方法

利用反射創建NacosConfigService實例
接下來我們看看其構造函數都做了什麼操作

依次初始化命名空間,以及http的包裝類,實際執行的是serverHttpAgent,以及ClientWorker(長輪詢),重點看一下ClientWorker

可以看到ClientWorker裡面初始化了兩個線程池,一個是定時執行任務線程池,一個是不定長線程池,同時啟動了定時任務線程池,設定每10毫秒執行一次:checkConfigInfo()方法。(先記得有這么回事)

繼續看locate 載入方法:

先載入共享配置類文件,即配置:spring.cloud.nacos.config. shared-dataids的文件

再載入配置為:spring.cloud.nacos.config.ext-config 的列表文件,

再去載入系統默認配置

內部方法調用邏輯大同小異,都是調用loadNacosDataIfPresent方法

繼續跟,走到loadNacosData方法

走到NacosConfigService的getConfig方法,getConfig方法會先去查詢本地文件(降級策略),本地文件存在則返回,本地文件不存在則調用http介面獲取,至此,配置中心初始化拉取數據完畢。

我們在nacos控制台修改了數據,客戶端又是如何快速感知到的呢?

入口在:NacosConfigAutoConfiguration的nacosContextRefresher方法

nacosContextRefresher實現了ApplicationListener<ApplicationReadyEvent>,會在spring容器發布ApplicationReadyEvent事件時,觸發監聽操作

針對每個配置文件注冊監聽

首先聲明一個Lister邏輯,然後放到listerMap中,key為dataId,lister內部邏輯主要是收到更新配置後,更新md5值,然後利用spring applicaiton發布RefreshEvent事件。

緊接著調用
configService.addListener(dataId, group, listener);
看下其內部處理邏輯
簡單概括就是將配置信息封裝成了一個cacheData對象,然後放到hashmap中

再次回到上文中的,ClientWorker的定時任務線程池中checkConfigInfo方法,每隔10s會去執行一次,

此處的longintTaskCount 自己理解應該一直是0,因為listenerSize 為配置文件數目不會超過3000,然後ParamUtil.getPerTaskConfigSize()也是固定值為3000,因此longingTaskCount為0,currentLongingTaskCount也為0,也就是if條件會永遠不滿足,但debug發現longingTaskCount會變為1,但是不知道為啥(希望大神解惑)

繼續看LongPollingRunnable的run方法

如果沒有用到本地配置,並且本地配置文件確實存在,則採用本地配置

如果是採用的本地配置。並且本地文件刪除了 ,則設置setUseLocalConfigInfo(false)

檢查md5值是否有變更,如有通知發送監聽

執行lister的receiveConfigInfo()方法

總結:客戶端通過定時任務線程池來監聽配置,當服務端配置發生變更時,客戶端會通過拉(長輪詢)方式得到最新的值並保存在cacheData中,然後於cacheData的listener的md5值做對比,如果有更新則通知,觸發lister的reveiveConfig方法;

來看下服務端的長輪詢處理:
發起長輪詢請求,對應http介面:post請求,/v1/cs/configs/listener,並設置超時時間30s,邏輯是如果30s內配置發生了變更,則會立馬返回,否則等待29s後執行檢查判斷配置是否發生變更返回。然後繼續發起輪詢請求,循環往復

服務端長輪詢介面處理邏輯:

將請求設為非同步,並封裝成ClientLongPolling

ClientLongPolling 的run邏輯:

1.創建一個調度的任務,調度的延時時間為 29.5s,(29.5由客戶端默認傳遞超時時間30s-服務端設置的500ms得來)

2.將該 ClientLongPolling 自身的實例添加到一個 allSubs 中去

3.延時時間到了之後,首先將該 ClientLongPolling 自身的實例從 allSubs 中移除

4.獲取服務端中保存的對應客戶端請求的 groupKeys 是否發生變更,將結果寫入 response 返回給客戶端

allSubs則必然和客戶端配置變更有必然聯系,查看服務端修改配置方法:post /v1/cs/configs/

先持久化,再去發布configDataChangeEvent事件

而我們的LongPollService 監聽的則是LocalDataChangeEvent事件,似乎和ConfigDataChangeEvent沒關系,其實不然

繼續跟進ConfigController的ConfigChangePublisher
.notifyConfigChange(new ConfigDataChangeEvent(....)))方法

AsyncNotifyService中注冊監聽邏輯

會執行一個AsyncTask任務,從而觸發一個http get介面:

也就是:

mpService是負責將配置保存到磁碟的服務類

看到確實發布了LocalDataChangeEvent事件,

然後又回到了上圖:LongPollingService 的onEvent方法,接著看DataChangeTask的邏輯,
首先遍歷allStubs隊列,然後找出當前的ClientLongPolling,
從隊列中移除,然後response寫入變更的groupKey

總結:可以看到nacos實際上是利用了推+拉 結合的方式來獲取配置,當沒有配置發生變更時,會hang住請求,默認等待(30-0.5)29.5秒後返回,而一旦發生數據變更,又會立刻推送變更數據寫入到response,然後客戶端更新配置;

以上則是動態配置原理,如果有不對的地方請指出;
參考: https://www.jianshu.com/p/acb9b1093a54

4. crontab定時任務 和linux請求介面

我能看懂的我感覺所有人都可以看懂

1.  crontab文件格式:

  *           *        *        *        *           command

minute   hour    day   month   week      command

分          時 知做瞎        天      月        星期       命令

minute: 表示分鍾,可以是從0到59之間的任何整數。

hour:表示小時,可以是從0到23之間的任何整數。

day:表示日期,胡納可以是從1到31之間的任何整數。

month:表示月份,可以是從1到12之間的任何整數。

week:表示星期幾,可以是從0到7之間的任何整數,這里的0或7代表星期日。

command:要執行的命令,可以是系統命令,也可以是自己編寫的腳本文件

2. 特殊字元:

星號(*):代表所有可能的值,例如month欄位如果是星號,則表示在滿足其它欄位的制約條件後每月都執行該命令操作。

逗號(,):可以用逗號隔開的值指定一個列表范圍,例如,「1,2,5,7,8,9」。

中杠(-):可以用整數之間的中杠表示一個整數范圍,例如「2-6」表示「2,3,4,5,6」。

正斜線(/):可以用正斜線指定時間的間隔頻率,例如「0-23/2」表示每兩小時執行一次。同時正斜線可以和星號一起使用,例搭空如*/10,如果用在minute欄位,表示每十分鍾執行一次。

3.運行crontab –e 編寫一條定時任務 */5 * * * * /home/test.sh 在每5分鍾執行一次test.sh腳本。

4.查詢當前用戶定時任務或刪除當前用戶定時任務

chkconfig --list crond         查看是否開機自動啟動

chkconfig --level 35 crond on         設置cond開機自動啟動

測試get請求

$ curl http://www.linuxidc.com/login.cgi?user=test001&password=123456

2、測試post請求

$ curl -d "user=nickwolfe&password=12345" http://www.linuxidc.com/login.cgi

我長用到的就這倆。

5. sae中使用 spring Scheled 定時任務 怎麼弄

首先要配置我們的spring.xml

xmlns 多加下面的內容、

然後xsi:schemaLocation多加下面的內容、

最後是我們的task任務掃描註解
[html] view plain
<task:annotation-driven/>

我的配置掃描位置是:
[html] view plain
<context:annotation-config/>
<bean class="org.springframework.beans.factory.annotation."/>
<context:component-scan base-package="com.test"/>

掃描的是com.test這樣的包下的穗州頌內容、
下面需要介面和實現(我的這幾個java文件都是com.test的包下的、)

[java] view plain
public interface IMyTestService {
public void myTest();
}

[java] view plain
@Component //import org.springframework.stereotype.Component;
public class MyTestServiceImpl implements IMyTestService {
@Scheled(cron="0/5 * * * * ? ") //每5秒執行一次
@Override
public void myTest(){
System.out.println("進入測試");
}
}

執行猜鄭後控制台就會列印出 進入測試 了

需要注意的幾點:

1、spring的@Scheled註解 需要寫在實現上跡鄭、

2、 定時器的任務方法不能有返回值(如果有返回值,spring初始化的時候會告訴你有個錯誤、需要設定一個proxytargetclass的某個值為true、具體就去網路google吧)

3、實現類上要有組件的註解@Component

6. 用ASP實現一個定時任務。怎麼實現

把下面的存為。ASP文件,運行,就可以可以了,可以自己提交

<html>

<head>耐明衫
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>新建網頁 1</title>
<script language="javascript">
function tijiao(){
setTimeout("tijiao1()",2000);//2秒以後提交。
}
function tijiao1(){
form1.submit();
}

</script>
</head>

<body onLoad="javascript:tijiao();">
<%if request("T1")<>"" then
response.write request("T1")
end if%>
<form method="POST" name="form1" action="index.asp">
<p>要提交的內容:<input type="text" name="T1" size="20" value="DFGDFGDFG"><昌腔/p>

<p><input type="submit" value="提交" name="B1"><input type="reset" value="重置" name="B2">槐猛</p>
</form>

</body>

</html>

7. js定時器發post請求行嗎

定時器可以定時發出警報或其他信號,它是一種電子設備,能夠讓你在某個指定的時間內發出警告或完成任務。定時器可以定歷檔蠢時發肢陪出警報或其他信號,蠢粗它是一種電子設備,能夠讓你在某個指定的時間內發出警告或完成任務。