mirror of
https://github.com/PowerJob/PowerJob.git
synced 2025-07-17 00:00:04 +08:00
[fix] fix the hugo 404 in gitee pages
This commit is contained in:
parent
a13f0cfa20
commit
7bbc9a25e8
@ -8,13 +8,13 @@
|
||||
<meta name="theme-color" content="#FFFFFF"><meta property="og:title" content="404 Page not found" />
|
||||
<meta property="og:description" content="" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="https://kfcfans.gitee.io/ohmyscheduler/404.html" />
|
||||
<meta property="og:url" content="https://kfcfans.gitee.io/404.html" />
|
||||
|
||||
<title>404 Page not found | OhMyScheduler</title>
|
||||
<link rel="manifest" href="/ohmyscheduler/manifest.json">
|
||||
<link rel="icon" href="/ohmyscheduler/favicon.png" type="image/x-icon">
|
||||
<link rel="stylesheet" href="/ohmyscheduler/book.min.e161f1fe2b283b6a43c29a52fde96e2387fade573e78efa6701d44c8499da76b.css" integrity="sha256-4WHx/isoO2pDwppS/eluI4f63lc+eO+mcB1EyEmdp2s=">
|
||||
<script defer src="/ohmyscheduler/en.search.min.1272dfb3df2a3f60e11485e0a1158d434da32177db3be3e28aae8e28aa7e9a15.js" integrity="sha256-EnLfs98qP2DhFIXgoRWNQ02jIXfbO+Piiq6OKKp+mhU="></script>
|
||||
<link rel="manifest" href="/manifest.json">
|
||||
<link rel="icon" href="/favicon.png" type="image/x-icon">
|
||||
<link rel="stylesheet" href="/book.min.e161f1fe2b283b6a43c29a52fde96e2387fade573e78efa6701d44c8499da76b.css" integrity="sha256-4WHx/isoO2pDwppS/eluI4f63lc+eO+mcB1EyEmdp2s=">
|
||||
<script defer src="/en.search.min.c80848d3c77260233d9a08502d528e5cb516bb11e5df300ef34c5507c61f37fd.js" integrity="sha256-yAhI08dyYCM9mghQLVKOXLUWuxHl3zAO80xVB8YfN/0="></script>
|
||||
<!--
|
||||
Made with Book Theme
|
||||
https://github.com/alex-shpak/hugo-book
|
||||
@ -40,7 +40,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
<h1>404</h1>
|
||||
<h2>Page Not Found</h2>
|
||||
<h3>
|
||||
<a href="/ohmyscheduler/">OhMyScheduler</a>
|
||||
<a href="/">OhMyScheduler</a>
|
||||
</h3>
|
||||
</div>
|
||||
</main>
|
||||
|
@ -8,14 +8,14 @@
|
||||
<meta name="theme-color" content="#FFFFFF"><meta property="og:title" content="Categories" />
|
||||
<meta property="og:description" content="" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="https://kfcfans.gitee.io/ohmyscheduler/categories/" />
|
||||
<meta property="og:url" content="https://kfcfans.gitee.io/categories/" />
|
||||
|
||||
<title>Categories | OhMyScheduler</title>
|
||||
<link rel="manifest" href="/ohmyscheduler/manifest.json">
|
||||
<link rel="icon" href="/ohmyscheduler/favicon.png" type="image/x-icon">
|
||||
<link rel="stylesheet" href="/ohmyscheduler/book.min.e161f1fe2b283b6a43c29a52fde96e2387fade573e78efa6701d44c8499da76b.css" integrity="sha256-4WHx/isoO2pDwppS/eluI4f63lc+eO+mcB1EyEmdp2s=">
|
||||
<script defer src="/ohmyscheduler/en.search.min.1272dfb3df2a3f60e11485e0a1158d434da32177db3be3e28aae8e28aa7e9a15.js" integrity="sha256-EnLfs98qP2DhFIXgoRWNQ02jIXfbO+Piiq6OKKp+mhU="></script>
|
||||
<link rel="alternate" type="application/rss+xml" href="https://kfcfans.gitee.io/ohmyscheduler/categories/index.xml" title="OhMyScheduler" />
|
||||
<link rel="manifest" href="/manifest.json">
|
||||
<link rel="icon" href="/favicon.png" type="image/x-icon">
|
||||
<link rel="stylesheet" href="/book.min.e161f1fe2b283b6a43c29a52fde96e2387fade573e78efa6701d44c8499da76b.css" integrity="sha256-4WHx/isoO2pDwppS/eluI4f63lc+eO+mcB1EyEmdp2s=">
|
||||
<script defer src="/en.search.min.c80848d3c77260233d9a08502d528e5cb516bb11e5df300ef34c5507c61f37fd.js" integrity="sha256-yAhI08dyYCM9mghQLVKOXLUWuxHl3zAO80xVB8YfN/0="></script>
|
||||
<link rel="alternate" type="application/rss+xml" href="https://kfcfans.gitee.io/categories/index.xml" title="OhMyScheduler" />
|
||||
<!--
|
||||
Made with Book Theme
|
||||
https://github.com/alex-shpak/hugo-book
|
||||
@ -31,7 +31,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
|
||||
<nav>
|
||||
<h2 class="book-brand">
|
||||
<a href="/ohmyscheduler"><span>OhMyScheduler</span>
|
||||
<a href="/"><span>OhMyScheduler</span>
|
||||
</a>
|
||||
</h2>
|
||||
|
||||
@ -83,7 +83,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/startup/1-server-startup/" class="">调度中心(Server)部署</a>
|
||||
<a href="/docs/startup/1-server-startup/" class="">调度中心(Server)部署</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -93,7 +93,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/startup/2-worker-startup/" class="">执行器(Worker)初始化</a>
|
||||
<a href="/docs/startup/2-worker-startup/" class="">执行器(Worker)初始化</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -103,7 +103,17 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/startup/3-processor-develop/" class="">处理器编写</a>
|
||||
<a href="/docs/startup/3-processor-develop/" class="">处理器开发</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/docs/startup/4-console-guide/" class="">任务管理与在线运维</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -116,10 +126,10 @@ https://github.com/alex-shpak/hugo-book
|
||||
|
||||
|
||||
|
||||
<li class="book-section-flat" >
|
||||
<li>
|
||||
|
||||
|
||||
<span>Shortcodes</span>
|
||||
<span>高级特性</span>
|
||||
|
||||
|
||||
|
||||
@ -134,7 +144,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/columns/" class="">Columns</a>
|
||||
<a href="/docs/super/container/" class="">容器</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -144,7 +154,13 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/details/" class="">Details</a>
|
||||
<a href="/docs/super/openapi/" class="">OpenAPI</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
</li>
|
||||
@ -154,51 +170,16 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/expand/" class="">Expand</a>
|
||||
<span>更新日志</span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/hints/" class="">Hints</a>
|
||||
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/katex/" class="">Katex</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/mermaid/" class="">Mermaid</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/tabs/" class="">Tabs</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<ul>
|
||||
|
||||
</ul>
|
||||
|
||||
@ -239,13 +220,13 @@ https://github.com/alex-shpak/hugo-book
|
||||
|
||||
<div class="flex align-center justify-between">
|
||||
<label for="menu-control">
|
||||
<img src="/ohmyscheduler/svg/menu.svg" class="book-icon" alt="Menu" />
|
||||
<img src="/svg/menu.svg" class="book-icon" alt="Menu" />
|
||||
</label>
|
||||
|
||||
<strong>Categories</strong>
|
||||
|
||||
<label for="toc-control">
|
||||
<img src="/ohmyscheduler/svg/toc.svg" class="book-icon" alt="Table of Contents" />
|
||||
<img src="/svg/toc.svg" class="book-icon" alt="Table of Contents" />
|
||||
</label>
|
||||
</div>
|
||||
|
||||
|
@ -2,12 +2,12 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>Categories on OhMyScheduler</title>
|
||||
<link>https://kfcfans.gitee.io/ohmyscheduler/categories/</link>
|
||||
<link>https://kfcfans.gitee.io/categories/</link>
|
||||
<description>Recent content in Categories on OhMyScheduler</description>
|
||||
<generator>Hugo -- gohugo.io</generator>
|
||||
<language>en-us</language>
|
||||
|
||||
<atom:link href="https://kfcfans.gitee.io/ohmyscheduler/categories/index.xml" rel="self" type="application/rss+xml" />
|
||||
<atom:link href="https://kfcfans.gitee.io/categories/index.xml" rel="self" type="application/rss+xml" />
|
||||
|
||||
|
||||
</channel>
|
||||
|
@ -8,14 +8,14 @@
|
||||
<meta name="theme-color" content="#FFFFFF"><meta property="og:title" content="Docs" />
|
||||
<meta property="og:description" content="" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="https://kfcfans.gitee.io/ohmyscheduler/docs/" />
|
||||
<meta property="og:url" content="https://kfcfans.gitee.io/docs/" />
|
||||
|
||||
<title>Docs | OhMyScheduler</title>
|
||||
<link rel="manifest" href="/ohmyscheduler/manifest.json">
|
||||
<link rel="icon" href="/ohmyscheduler/favicon.png" type="image/x-icon">
|
||||
<link rel="stylesheet" href="/ohmyscheduler/book.min.e161f1fe2b283b6a43c29a52fde96e2387fade573e78efa6701d44c8499da76b.css" integrity="sha256-4WHx/isoO2pDwppS/eluI4f63lc+eO+mcB1EyEmdp2s=">
|
||||
<script defer src="/ohmyscheduler/en.search.min.1272dfb3df2a3f60e11485e0a1158d434da32177db3be3e28aae8e28aa7e9a15.js" integrity="sha256-EnLfs98qP2DhFIXgoRWNQ02jIXfbO+Piiq6OKKp+mhU="></script>
|
||||
<link rel="alternate" type="application/rss+xml" href="https://kfcfans.gitee.io/ohmyscheduler/docs/index.xml" title="OhMyScheduler" />
|
||||
<link rel="manifest" href="/manifest.json">
|
||||
<link rel="icon" href="/favicon.png" type="image/x-icon">
|
||||
<link rel="stylesheet" href="/book.min.e161f1fe2b283b6a43c29a52fde96e2387fade573e78efa6701d44c8499da76b.css" integrity="sha256-4WHx/isoO2pDwppS/eluI4f63lc+eO+mcB1EyEmdp2s=">
|
||||
<script defer src="/en.search.min.c80848d3c77260233d9a08502d528e5cb516bb11e5df300ef34c5507c61f37fd.js" integrity="sha256-yAhI08dyYCM9mghQLVKOXLUWuxHl3zAO80xVB8YfN/0="></script>
|
||||
<link rel="alternate" type="application/rss+xml" href="https://kfcfans.gitee.io/docs/index.xml" title="OhMyScheduler" />
|
||||
<!--
|
||||
Made with Book Theme
|
||||
https://github.com/alex-shpak/hugo-book
|
||||
@ -31,7 +31,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
|
||||
<nav>
|
||||
<h2 class="book-brand">
|
||||
<a href="/ohmyscheduler"><span>OhMyScheduler</span>
|
||||
<a href="/"><span>OhMyScheduler</span>
|
||||
</a>
|
||||
</h2>
|
||||
|
||||
@ -83,7 +83,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/startup/1-server-startup/" class="">调度中心(Server)部署</a>
|
||||
<a href="/docs/startup/1-server-startup/" class="">调度中心(Server)部署</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -93,7 +93,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/startup/2-worker-startup/" class="">执行器(Worker)初始化</a>
|
||||
<a href="/docs/startup/2-worker-startup/" class="">执行器(Worker)初始化</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -103,7 +103,17 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/startup/3-processor-develop/" class="">处理器编写</a>
|
||||
<a href="/docs/startup/3-processor-develop/" class="">处理器开发</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/docs/startup/4-console-guide/" class="">任务管理与在线运维</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -116,10 +126,10 @@ https://github.com/alex-shpak/hugo-book
|
||||
|
||||
|
||||
|
||||
<li class="book-section-flat" >
|
||||
<li>
|
||||
|
||||
|
||||
<span>Shortcodes</span>
|
||||
<span>高级特性</span>
|
||||
|
||||
|
||||
|
||||
@ -134,7 +144,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/columns/" class="">Columns</a>
|
||||
<a href="/docs/super/container/" class="">容器</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -144,7 +154,13 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/details/" class="">Details</a>
|
||||
<a href="/docs/super/openapi/" class="">OpenAPI</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
</li>
|
||||
@ -154,51 +170,16 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/expand/" class="">Expand</a>
|
||||
<span>更新日志</span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/hints/" class="">Hints</a>
|
||||
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/katex/" class="">Katex</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/mermaid/" class="">Mermaid</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/tabs/" class="">Tabs</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<ul>
|
||||
|
||||
</ul>
|
||||
|
||||
@ -239,13 +220,13 @@ https://github.com/alex-shpak/hugo-book
|
||||
|
||||
<div class="flex align-center justify-between">
|
||||
<label for="menu-control">
|
||||
<img src="/ohmyscheduler/svg/menu.svg" class="book-icon" alt="Menu" />
|
||||
<img src="/svg/menu.svg" class="book-icon" alt="Menu" />
|
||||
</label>
|
||||
|
||||
<strong>Docs</strong>
|
||||
|
||||
<label for="toc-control">
|
||||
<img src="/ohmyscheduler/svg/toc.svg" class="book-icon" alt="Table of Contents" />
|
||||
<img src="/svg/toc.svg" class="book-icon" alt="Table of Contents" />
|
||||
</label>
|
||||
</div>
|
||||
|
||||
|
@ -2,12 +2,12 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>Docs on OhMyScheduler</title>
|
||||
<link>https://kfcfans.gitee.io/ohmyscheduler/docs/</link>
|
||||
<link>https://kfcfans.gitee.io/docs/</link>
|
||||
<description>Recent content in Docs on OhMyScheduler</description>
|
||||
<generator>Hugo -- gohugo.io</generator>
|
||||
<language>en-us</language>
|
||||
|
||||
<atom:link href="https://kfcfans.gitee.io/ohmyscheduler/docs/index.xml" rel="self" type="application/rss+xml" />
|
||||
<atom:link href="https://kfcfans.gitee.io/docs/index.xml" rel="self" type="application/rss+xml" />
|
||||
|
||||
|
||||
</channel>
|
||||
|
@ -22,13 +22,13 @@
|
||||
调度服务器(oh-my-scheduler-server)为了支持环境隔离,分别采用了日常(application-daily.properties)、预发(application-pre.properties)和线上(application-product.properties)三套配置文件,请根据实际需求进行修改,以下为配置文件详解。
|
||||
配置项 含义 可选 server.port SpringBoot配置,HTTP端口号,默认7700 否 oms." />
|
||||
<meta property="og:type" content="article" />
|
||||
<meta property="og:url" content="https://kfcfans.gitee.io/ohmyscheduler/docs/startup/1-server-startup/" />
|
||||
<meta property="og:url" content="https://kfcfans.gitee.io/docs/startup/1-server-startup/" />
|
||||
|
||||
<title>调度中心(Server)部署 | OhMyScheduler</title>
|
||||
<link rel="manifest" href="/ohmyscheduler/manifest.json">
|
||||
<link rel="icon" href="/ohmyscheduler/favicon.png" type="image/x-icon">
|
||||
<link rel="stylesheet" href="/ohmyscheduler/book.min.e161f1fe2b283b6a43c29a52fde96e2387fade573e78efa6701d44c8499da76b.css" integrity="sha256-4WHx/isoO2pDwppS/eluI4f63lc+eO+mcB1EyEmdp2s=">
|
||||
<script defer src="/ohmyscheduler/en.search.min.1272dfb3df2a3f60e11485e0a1158d434da32177db3be3e28aae8e28aa7e9a15.js" integrity="sha256-EnLfs98qP2DhFIXgoRWNQ02jIXfbO+Piiq6OKKp+mhU="></script>
|
||||
<link rel="manifest" href="/manifest.json">
|
||||
<link rel="icon" href="/favicon.png" type="image/x-icon">
|
||||
<link rel="stylesheet" href="/book.min.e161f1fe2b283b6a43c29a52fde96e2387fade573e78efa6701d44c8499da76b.css" integrity="sha256-4WHx/isoO2pDwppS/eluI4f63lc+eO+mcB1EyEmdp2s=">
|
||||
<script defer src="/en.search.min.c80848d3c77260233d9a08502d528e5cb516bb11e5df300ef34c5507c61f37fd.js" integrity="sha256-yAhI08dyYCM9mghQLVKOXLUWuxHl3zAO80xVB8YfN/0="></script>
|
||||
<!--
|
||||
Made with Book Theme
|
||||
https://github.com/alex-shpak/hugo-book
|
||||
@ -44,7 +44,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
|
||||
<nav>
|
||||
<h2 class="book-brand">
|
||||
<a href="/ohmyscheduler"><span>OhMyScheduler</span>
|
||||
<a href="/"><span>OhMyScheduler</span>
|
||||
</a>
|
||||
</h2>
|
||||
|
||||
@ -96,7 +96,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/startup/1-server-startup/" class="active">调度中心(Server)部署</a>
|
||||
<a href="/docs/startup/1-server-startup/" class="active">调度中心(Server)部署</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -106,7 +106,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/startup/2-worker-startup/" class="">执行器(Worker)初始化</a>
|
||||
<a href="/docs/startup/2-worker-startup/" class="">执行器(Worker)初始化</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -116,7 +116,17 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/startup/3-processor-develop/" class="">处理器编写</a>
|
||||
<a href="/docs/startup/3-processor-develop/" class="">处理器开发</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/docs/startup/4-console-guide/" class="">任务管理与在线运维</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -129,10 +139,10 @@ https://github.com/alex-shpak/hugo-book
|
||||
|
||||
|
||||
|
||||
<li class="book-section-flat" >
|
||||
<li>
|
||||
|
||||
|
||||
<span>Shortcodes</span>
|
||||
<span>高级特性</span>
|
||||
|
||||
|
||||
|
||||
@ -147,7 +157,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/columns/" class="">Columns</a>
|
||||
<a href="/docs/super/container/" class="">容器</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -157,7 +167,13 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/details/" class="">Details</a>
|
||||
<a href="/docs/super/openapi/" class="">OpenAPI</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
</li>
|
||||
@ -167,51 +183,16 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/expand/" class="">Expand</a>
|
||||
<span>更新日志</span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/hints/" class="">Hints</a>
|
||||
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/katex/" class="">Katex</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/mermaid/" class="">Mermaid</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/tabs/" class="">Tabs</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<ul>
|
||||
|
||||
</ul>
|
||||
|
||||
@ -252,13 +233,13 @@ https://github.com/alex-shpak/hugo-book
|
||||
|
||||
<div class="flex align-center justify-between">
|
||||
<label for="menu-control">
|
||||
<img src="/ohmyscheduler/svg/menu.svg" class="book-icon" alt="Menu" />
|
||||
<img src="/svg/menu.svg" class="book-icon" alt="Menu" />
|
||||
</label>
|
||||
|
||||
<strong>调度中心(Server)部署</strong>
|
||||
|
||||
<label for="toc-control">
|
||||
<img src="/ohmyscheduler/svg/toc.svg" class="book-icon" alt="Table of Contents" />
|
||||
<img src="/svg/toc.svg" class="book-icon" alt="Table of Contents" />
|
||||
</label>
|
||||
</div>
|
||||
|
||||
@ -383,9 +364,10 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>验证:访问<code>http://ip:port</code>查看是否出现OhMyScheduler的欢迎页面。</li>
|
||||
</ul>
|
||||
<h2 id="部署调度服务器docker">部署调度服务器—Docker</h2>
|
||||
<blockquote>
|
||||
<p><strong>建议自己根据项目中的Dockerfile稍作修改,制作自己的Docker镜像,而不是直接使用官方镜像</strong>!原因在于:容器功能需要用到Git和Maven来编译代码库,而公司内部往往都会搭建自己的私有仓库,所以Git容器功能没办法正常运行(即,<strong>官方镜像中的调度服务器不支持Git容器的部署</strong>)。</p>
|
||||
<blockquote class="book-hint warning">
|
||||
<strong>建议自己根据项目中的Dockerfile稍作修改,制作自己的Docker镜像,而不是直接使用官方镜像</strong>!原因在于:容器功能需要用到Git和Maven来编译代码库,而公司内部往往都会搭建自己的私有仓库,所以Git容器功能没办法正常运行(即,<strong>官方镜像中的调度服务器不支持Git容器的部署</strong>)。
|
||||
</blockquote>
|
||||
|
||||
<p><a href="https://hub.docker.com/r/tjqq/oms-server">Docker Hub地址</a></p>
|
||||
<p>部署流程:</p>
|
||||
<ol>
|
||||
@ -407,7 +389,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>npm run build -> nginx config</li>
|
||||
</ol>
|
||||
<hr>
|
||||
<p><strong>特别鸣谢</strong>:感谢<a href="https://github.com/fengnan0929">某知名上市电商公司前端</a>对本项目的大力支持!</p>
|
||||
<p><strong>特别鸣谢</strong>:感谢<a href="https://github.com/fengnan0929">某知名上市电商公司前端开发者</a>对本项目的大力支持!</p>
|
||||
<h2 id="初始化应用分组">初始化应用分组</h2>
|
||||
<blockquote>
|
||||
<p>每一个业务系统初次接入OhMyScheduler时,都需要<strong>先完成应用注册</strong>。</p>
|
||||
|
@ -5,24 +5,24 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="基于宿主应用的执行器初始化 宿主应用即原有的业务应用,假如需要调度执行的任务与当前业务有较为紧密的联系,建议采取该方式。
|
||||
OhMyScheduler当前支持Shell、Python等脚本处理器和Java处理器。脚本处理器只需要开发者完成脚本的编写(xxx.sh / xxx.py),在控制台填入脚本内容即可,本章不再赘述。本章将重点阐述Java处理器开发方法与使用技巧。
|
||||
Java处理器可根据代码所处位置划分为内置Java处理器和容器Java处理器,前者直接集成在宿主应用(也就是接入本系统的业务应用)中,一般用来处理业务需求;后者可以在一个独立的轻量级的Java工程中开发,通过容器技术(详见容器章节)被worker集群热加载,提供Java的“脚本能力”,一般用于处理灵活多变的需求。 Java处理器可根据对象创建者划分为SpringBean处理器和普通Java对象处理器,前者由Spring IOC容器完成处理器的创建和初始化,后者则有OhMyScheduler维护其状态。如果宿主应用支持Spring,强烈建议使用SpringBean处理器,开发者仅需要将Processor注册进Spring IOC容器(一个@Component注解或一句bean配置)。 Java处理器可根据功能划分为单机处理器、广播处理器、Map处理器和MapReduce处理器。 单机处理器对应了单机任务,即某个任务的某次运行只会有某一台机器的某一个线程参与运算。 广播处理器对应了广播任务,即某个任务的某次运行会调动集群内所有机器参与运算。 Map处理器对应了Map任务,即某个任务在运行过程中,允许产生子任务并分发到其他机器进行运算。 MapReduce处理器对应了MapReduce任务,在Map任务的基础上,增加了所有任务结束后的汇总统计。 首先,添加相关的jar包依赖,最新依赖版本请参考maven中央仓库:推荐地址&备用地址
|
||||
首先,添加相关的jar包依赖,最新依赖版本请参考maven中央仓库:推荐地址&备用地址
|
||||
<dependency> <groupId>com.github.kfcfans</groupId> <artifactId>oh-my-scheduler-worker</artifactId> <version>1.2.0</version> </dependency> 其次,填写执行器客户端配置文件OhMyConfig,各参数说明如下表所示:
|
||||
属性名称 含义 默认值 appName 宿主应用名称,需要提前在控制台完成注册 无,必填项,否则启动报错 port Worker工作端口 27777 serverAddress 调度中心(oh-my-scheduler-server)地址列表 无,必填项,否则启动报错 storeStrategy 本地存储策略,枚举值磁盘/内存,大型MapReduce等会产生大量Task的任务推荐使用磁盘降低内存压力,否则建议使用内存加速计算 StoreStrategy.DISK(磁盘) maxResultLength 每个Task返回结果的默认长度,超长将被截断。过长可能导致网络拥塞 8096 enableTestMode 是否启用测试模式,启用后无需Server也能顺利启动OhMyScheduler-Worker,用于处理器本地的单元测试 false 最后,初始化客户端,完成执行器的启动,代码示例如下:">
|
||||
属性名称 含义 默认值 appName 宿主应用名称,需要提前在控制台完成注册 无,必填项,否则启动报错 port Worker工作端口 27777 serverAddress 调度中心(oh-my-scheduler-server)地址列表 无,必填项,否则启动报错 storeStrategy 本地存储策略,枚举值磁盘/内存,大型MapReduce等会产生大量Task的任务推荐使用磁盘降低内存压力,否则建议使用内存加速计算 StoreStrategy.DISK(磁盘) maxResultLength 每个Task返回结果的默认长度,超长将被截断。过长可能导致网络拥塞 8096 enableTestMode 是否启用测试模式,启用后无需Server也能顺利启动OhMyScheduler-Worker,用于处理器本地的单元测试 false 最后,初始化客户端,完成执行器的启动,代码示例如下:
|
||||
@Configuration public class OhMySchedulerConfig { @Bean public OhMyWorker initOMS() throws Exception { // 服务器HTTP地址(端口号为 server.port,而不是 ActorSystem port) List<String> serverAddress = Lists.">
|
||||
<meta name="theme-color" content="#FFFFFF"><meta property="og:title" content="执行器(Worker)初始化" />
|
||||
<meta property="og:description" content="基于宿主应用的执行器初始化 宿主应用即原有的业务应用,假如需要调度执行的任务与当前业务有较为紧密的联系,建议采取该方式。
|
||||
OhMyScheduler当前支持Shell、Python等脚本处理器和Java处理器。脚本处理器只需要开发者完成脚本的编写(xxx.sh / xxx.py),在控制台填入脚本内容即可,本章不再赘述。本章将重点阐述Java处理器开发方法与使用技巧。
|
||||
Java处理器可根据代码所处位置划分为内置Java处理器和容器Java处理器,前者直接集成在宿主应用(也就是接入本系统的业务应用)中,一般用来处理业务需求;后者可以在一个独立的轻量级的Java工程中开发,通过容器技术(详见容器章节)被worker集群热加载,提供Java的“脚本能力”,一般用于处理灵活多变的需求。 Java处理器可根据对象创建者划分为SpringBean处理器和普通Java对象处理器,前者由Spring IOC容器完成处理器的创建和初始化,后者则有OhMyScheduler维护其状态。如果宿主应用支持Spring,强烈建议使用SpringBean处理器,开发者仅需要将Processor注册进Spring IOC容器(一个@Component注解或一句bean配置)。 Java处理器可根据功能划分为单机处理器、广播处理器、Map处理器和MapReduce处理器。 单机处理器对应了单机任务,即某个任务的某次运行只会有某一台机器的某一个线程参与运算。 广播处理器对应了广播任务,即某个任务的某次运行会调动集群内所有机器参与运算。 Map处理器对应了Map任务,即某个任务在运行过程中,允许产生子任务并分发到其他机器进行运算。 MapReduce处理器对应了MapReduce任务,在Map任务的基础上,增加了所有任务结束后的汇总统计。 首先,添加相关的jar包依赖,最新依赖版本请参考maven中央仓库:推荐地址&备用地址
|
||||
首先,添加相关的jar包依赖,最新依赖版本请参考maven中央仓库:推荐地址&备用地址
|
||||
<dependency> <groupId>com.github.kfcfans</groupId> <artifactId>oh-my-scheduler-worker</artifactId> <version>1.2.0</version> </dependency> 其次,填写执行器客户端配置文件OhMyConfig,各参数说明如下表所示:
|
||||
属性名称 含义 默认值 appName 宿主应用名称,需要提前在控制台完成注册 无,必填项,否则启动报错 port Worker工作端口 27777 serverAddress 调度中心(oh-my-scheduler-server)地址列表 无,必填项,否则启动报错 storeStrategy 本地存储策略,枚举值磁盘/内存,大型MapReduce等会产生大量Task的任务推荐使用磁盘降低内存压力,否则建议使用内存加速计算 StoreStrategy.DISK(磁盘) maxResultLength 每个Task返回结果的默认长度,超长将被截断。过长可能导致网络拥塞 8096 enableTestMode 是否启用测试模式,启用后无需Server也能顺利启动OhMyScheduler-Worker,用于处理器本地的单元测试 false 最后,初始化客户端,完成执行器的启动,代码示例如下:" />
|
||||
属性名称 含义 默认值 appName 宿主应用名称,需要提前在控制台完成注册 无,必填项,否则启动报错 port Worker工作端口 27777 serverAddress 调度中心(oh-my-scheduler-server)地址列表 无,必填项,否则启动报错 storeStrategy 本地存储策略,枚举值磁盘/内存,大型MapReduce等会产生大量Task的任务推荐使用磁盘降低内存压力,否则建议使用内存加速计算 StoreStrategy.DISK(磁盘) maxResultLength 每个Task返回结果的默认长度,超长将被截断。过长可能导致网络拥塞 8096 enableTestMode 是否启用测试模式,启用后无需Server也能顺利启动OhMyScheduler-Worker,用于处理器本地的单元测试 false 最后,初始化客户端,完成执行器的启动,代码示例如下:
|
||||
@Configuration public class OhMySchedulerConfig { @Bean public OhMyWorker initOMS() throws Exception { // 服务器HTTP地址(端口号为 server.port,而不是 ActorSystem port) List<String> serverAddress = Lists." />
|
||||
<meta property="og:type" content="article" />
|
||||
<meta property="og:url" content="https://kfcfans.gitee.io/ohmyscheduler/docs/startup/2-worker-startup/" />
|
||||
<meta property="og:url" content="https://kfcfans.gitee.io/docs/startup/2-worker-startup/" />
|
||||
|
||||
<title>执行器(Worker)初始化 | OhMyScheduler</title>
|
||||
<link rel="manifest" href="/ohmyscheduler/manifest.json">
|
||||
<link rel="icon" href="/ohmyscheduler/favicon.png" type="image/x-icon">
|
||||
<link rel="stylesheet" href="/ohmyscheduler/book.min.e161f1fe2b283b6a43c29a52fde96e2387fade573e78efa6701d44c8499da76b.css" integrity="sha256-4WHx/isoO2pDwppS/eluI4f63lc+eO+mcB1EyEmdp2s=">
|
||||
<script defer src="/ohmyscheduler/en.search.min.1272dfb3df2a3f60e11485e0a1158d434da32177db3be3e28aae8e28aa7e9a15.js" integrity="sha256-EnLfs98qP2DhFIXgoRWNQ02jIXfbO+Piiq6OKKp+mhU="></script>
|
||||
<link rel="manifest" href="/manifest.json">
|
||||
<link rel="icon" href="/favicon.png" type="image/x-icon">
|
||||
<link rel="stylesheet" href="/book.min.e161f1fe2b283b6a43c29a52fde96e2387fade573e78efa6701d44c8499da76b.css" integrity="sha256-4WHx/isoO2pDwppS/eluI4f63lc+eO+mcB1EyEmdp2s=">
|
||||
<script defer src="/en.search.min.c80848d3c77260233d9a08502d528e5cb516bb11e5df300ef34c5507c61f37fd.js" integrity="sha256-yAhI08dyYCM9mghQLVKOXLUWuxHl3zAO80xVB8YfN/0="></script>
|
||||
<!--
|
||||
Made with Book Theme
|
||||
https://github.com/alex-shpak/hugo-book
|
||||
@ -38,7 +38,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
|
||||
<nav>
|
||||
<h2 class="book-brand">
|
||||
<a href="/ohmyscheduler"><span>OhMyScheduler</span>
|
||||
<a href="/"><span>OhMyScheduler</span>
|
||||
</a>
|
||||
</h2>
|
||||
|
||||
@ -90,7 +90,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/startup/1-server-startup/" class="">调度中心(Server)部署</a>
|
||||
<a href="/docs/startup/1-server-startup/" class="">调度中心(Server)部署</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -100,7 +100,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/startup/2-worker-startup/" class="active">执行器(Worker)初始化</a>
|
||||
<a href="/docs/startup/2-worker-startup/" class="active">执行器(Worker)初始化</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -110,7 +110,17 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/startup/3-processor-develop/" class="">处理器编写</a>
|
||||
<a href="/docs/startup/3-processor-develop/" class="">处理器开发</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/docs/startup/4-console-guide/" class="">任务管理与在线运维</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -123,10 +133,10 @@ https://github.com/alex-shpak/hugo-book
|
||||
|
||||
|
||||
|
||||
<li class="book-section-flat" >
|
||||
<li>
|
||||
|
||||
|
||||
<span>Shortcodes</span>
|
||||
<span>高级特性</span>
|
||||
|
||||
|
||||
|
||||
@ -141,7 +151,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/columns/" class="">Columns</a>
|
||||
<a href="/docs/super/container/" class="">容器</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -151,7 +161,13 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/details/" class="">Details</a>
|
||||
<a href="/docs/super/openapi/" class="">OpenAPI</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
</li>
|
||||
@ -161,51 +177,16 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/expand/" class="">Expand</a>
|
||||
<span>更新日志</span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/hints/" class="">Hints</a>
|
||||
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/katex/" class="">Katex</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/mermaid/" class="">Mermaid</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/tabs/" class="">Tabs</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<ul>
|
||||
|
||||
</ul>
|
||||
|
||||
@ -246,13 +227,13 @@ https://github.com/alex-shpak/hugo-book
|
||||
|
||||
<div class="flex align-center justify-between">
|
||||
<label for="menu-control">
|
||||
<img src="/ohmyscheduler/svg/menu.svg" class="book-icon" alt="Menu" />
|
||||
<img src="/svg/menu.svg" class="book-icon" alt="Menu" />
|
||||
</label>
|
||||
|
||||
<strong>执行器(Worker)初始化</strong>
|
||||
|
||||
<label for="toc-control">
|
||||
<img src="/ohmyscheduler/svg/toc.svg" class="book-icon" alt="Table of Contents" />
|
||||
<img src="/svg/toc.svg" class="book-icon" alt="Table of Contents" />
|
||||
</label>
|
||||
</div>
|
||||
|
||||
@ -263,11 +244,8 @@ https://github.com/alex-shpak/hugo-book
|
||||
|
||||
<nav id="TableOfContents">
|
||||
<ul>
|
||||
<li><a href="#基于宿主应用的执行器初始化">基于宿主应用的执行器初始化</a>
|
||||
<ul>
|
||||
<li></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#基于宿主应用的执行器初始化">基于宿主应用的执行器初始化</a></li>
|
||||
<li><a href="#基于agent的执行器初始化">基于agent的执行器初始化</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
@ -283,21 +261,6 @@ https://github.com/alex-shpak/hugo-book
|
||||
<blockquote>
|
||||
<p>宿主应用即原有的业务应用,假如需要调度执行的任务与当前业务有较为紧密的联系,建议采取该方式。</p>
|
||||
</blockquote>
|
||||
<blockquote>
|
||||
<p>OhMyScheduler当前支持Shell、Python等脚本处理器和Java处理器。脚本处理器只需要开发者完成脚本的编写(xxx.sh / xxx.py),在控制台填入脚本内容即可,本章不再赘述。本章将重点阐述Java处理器开发方法与使用技巧。</p>
|
||||
</blockquote>
|
||||
<ul>
|
||||
<li>Java处理器可根据<strong>代码所处位置</strong>划分为内置Java处理器和容器Java处理器,前者直接集成在宿主应用(也就是接入本系统的业务应用)中,一般用来处理业务需求;后者可以在一个独立的轻量级的Java工程中开发,通过<strong>容器技术</strong>(详见容器章节)被worker集群热加载,提供Java的“脚本能力”,一般用于处理灵活多变的需求。</li>
|
||||
<li>Java处理器可根据<strong>对象创建者</strong>划分为SpringBean处理器和普通Java对象处理器,前者由Spring IOC容器完成处理器的创建和初始化,后者则有OhMyScheduler维护其状态。如果宿主应用支持Spring,<strong>强烈建议使用SpringBean处理器</strong>,开发者仅需要将Processor注册进Spring IOC容器(一个<code>@Component</code>注解或一句<code>bean</code>配置)。</li>
|
||||
<li>Java处理器可根据<strong>功能</strong>划分为单机处理器、广播处理器、Map处理器和MapReduce处理器。
|
||||
<ul>
|
||||
<li>单机处理器对应了单机任务,即某个任务的某次运行只会有某一台机器的某一个线程参与运算。</li>
|
||||
<li>广播处理器对应了广播任务,即某个任务的某次运行会<strong>调动集群内所有机器参与运算</strong>。</li>
|
||||
<li>Map处理器对应了Map任务,即某个任务在运行过程中,<strong>允许产生子任务并分发到其他机器进行运算</strong>。</li>
|
||||
<li>MapReduce处理器对应了MapReduce任务,在Map任务的基础上,<strong>增加了所有任务结束后的汇总统计</strong>。</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<p>首先,添加相关的jar包依赖,最新依赖版本请参考maven中央仓库:<a href="https://search.maven.org/search?q=oh-my-scheduler-worker">推荐地址</a>&<a href="https://mvnrepository.com/search?q=com.github.kfcfans">备用地址</a></p>
|
||||
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml"><span style="color:#f92672"><dependency></span>
|
||||
<span style="color:#f92672"><groupId></span>com.github.kfcfans<span style="color:#f92672"></groupId></span>
|
||||
@ -371,19 +334,53 @@ https://github.com/alex-shpak/hugo-book
|
||||
<span style="color:#f92672">}</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
</code></pre></div><p>非Spring应用程序在创建<code>OhMyWorker</code>对象后手动调用<code>ohMyWorker.init()</code>方法完成初始化即可。</p>
|
||||
<h4 id="基于agent的执行器初始化">基于agent的执行器初始化</h4>
|
||||
<hr>
|
||||
<p><strong>OhMyScheduler日志单独配置</strong></p>
|
||||
<p>目前,OhMyScheduler-Worker并没有实现自己的LogFactory(如果有需求的话请提ISSUE,可以考虑实现),原因如下:</p>
|
||||
<ol>
|
||||
<li>OhMyScheduler-Worker的日志基于<code>Slf4J</code>输出,即采用了基于门面设计模式的日志框架,宿主应用无论如何都可以搭起Slf4J与实际的日志框架这座桥梁。</li>
|
||||
<li>减轻了部分开发工作量,不再需要实现自己的LogFactory(虽然不怎么难就是了…)。</li>
|
||||
</ol>
|
||||
<p>为此,为了顺利且友好地输出日志,请在日志配置文件(logback.xml/log4j2.xml/…)中为<code>OhMyScheduler-Worker</code>单独进行日志配置,比如(logback示例):</p>
|
||||
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml"><span style="color:#f92672"><appender</span> <span style="color:#a6e22e">name=</span><span style="color:#e6db74">"OMS_WORKER_APPENDER"</span> <span style="color:#a6e22e">class=</span><span style="color:#e6db74">"ch.qos.logback.core.rolling.RollingFileAppender"</span><span style="color:#f92672">></span>
|
||||
<span style="color:#f92672"><file></span>${LOG_PATH}/oms-worker.log<span style="color:#f92672"></file></span>
|
||||
<span style="color:#f92672"><rollingPolicy</span> <span style="color:#a6e22e">class=</span><span style="color:#e6db74">"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"</span><span style="color:#f92672">></span>
|
||||
<span style="color:#f92672"><FileNamePattern></span>${LOG_PATH}/oms-worker.%d{yyyy-MM-dd}.log<span style="color:#f92672"></FileNamePattern></span>
|
||||
<span style="color:#f92672"><MaxHistory></span>7<span style="color:#f92672"></MaxHistory></span>
|
||||
<span style="color:#f92672"></rollingPolicy></span>
|
||||
<span style="color:#f92672"><encoder</span> <span style="color:#a6e22e">class=</span><span style="color:#e6db74">"ch.qos.logback.classic.encoder.PatternLayoutEncoder"</span><span style="color:#f92672">></span>
|
||||
<span style="color:#f92672"><pattern></span>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n<span style="color:#f92672"></pattern></span>
|
||||
<span style="color:#f92672"><charset></span>UTF-8<span style="color:#f92672"></charset></span>
|
||||
<span style="color:#f92672"></encoder></span>
|
||||
<span style="color:#f92672"><append></span>true<span style="color:#f92672"></append></span>
|
||||
<span style="color:#f92672"></appender></span>
|
||||
|
||||
<span style="color:#f92672"><logger</span> <span style="color:#a6e22e">name=</span><span style="color:#e6db74">"com.github.kfcfans.oms.worker"</span> <span style="color:#a6e22e">level=</span><span style="color:#e6db74">"INFO"</span> <span style="color:#a6e22e">additivity=</span><span style="color:#e6db74">"false"</span><span style="color:#f92672">></span>
|
||||
<span style="color:#f92672"><appender-ref</span> <span style="color:#a6e22e">ref=</span><span style="color:#e6db74">"OMS_WORKER_APPENDER"</span> <span style="color:#f92672">/></span>
|
||||
<span style="color:#f92672"></logger></span>
|
||||
</code></pre></div><p>无论如何,OhMyScheduler-Worker启动时都会打印Banner(如下所示),您可以通过Banner来判断日志配置是否成功(emmm…Markdown显示似乎有点丑,实际上超帅的呢~):</p>
|
||||
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text"> ███████ ██ ████ ████ ████████ ██ ██ ██
|
||||
██░░░░░██ ░██ ░██░██ ██░██ ██ ██ ██░░░░░░ ░██ ░██ ░██
|
||||
██ ░░██░██ ░██░░██ ██ ░██ ░░██ ██ ░██ █████ ░██ █████ ░██ ██ ██ ░██ █████ ██████
|
||||
░██ ░██░██████ ░██ ░░███ ░██ ░░███ ░█████████ ██░░░██░██████ ██░░░██ ██████░██ ░██ ░██ ██░░░██░░██░░█
|
||||
░██ ░██░██░░░██░██ ░░█ ░██ ░██ ░░░░░░░░██░██ ░░ ░██░░░██░███████ ██░░░██░██ ░██ ░██░███████ ░██ ░
|
||||
░░██ ██ ░██ ░██░██ ░ ░██ ██ ░██░██ ██░██ ░██░██░░░░ ░██ ░██░██ ░██ ░██░██░░░░ ░██
|
||||
░░███████ ░██ ░██░██ ░██ ██ ████████ ░░█████ ░██ ░██░░██████░░██████░░██████ ███░░██████░███
|
||||
░░░░░░░ ░░ ░░ ░░ ░░ ░░ ░░░░░░░░ ░░░░░ ░░ ░░ ░░░░░░ ░░░░░░ ░░░░░░ ░░░ ░░░░░░ ░░░
|
||||
</code></pre></div><h2 id="基于agent的执行器初始化">基于agent的执行器初始化</h2>
|
||||
<blockquote>
|
||||
<p>agent是一个没有任何业务逻辑的执行器(其实就是为worker加了一个main方法)。</p>
|
||||
</blockquote>
|
||||
<p>代码编译方式启动示例:<code>java -jar oh-my-scheduler-worker-agent-1.2.0.jar -a my-agent</code>:</p>
|
||||
<pre><code>Usage: OhMyAgent [-hV] -a=<appName> [-l=<length>] [-p=<storeStrategy>]
|
||||
[-s=<server>]
|
||||
<pre><code>Usage: OhMyAgent [-hV] -a=<appName> [-e=<storeStrategy>] [-l=<length>]
|
||||
[-p=<port>] [-s=<server>]
|
||||
OhMyScheduler-Worker代理
|
||||
-a, --app=<appName> worker-agent名称,可通过调度中心控制台创建
|
||||
-e, --persistence=<storeStrategy>
|
||||
存储策略,枚举值,DISK 或 MEMORY
|
||||
-h, --help Show this help message and exit.
|
||||
-l, --length=<length> 返回值最大长度
|
||||
-p, --persistence=<storeStrategy>
|
||||
存储策略,枚举值,DISK 或 MEMORY
|
||||
-p, --port=<port> worker-agent的ActorSystem监听端口,不建议更改
|
||||
-s, --server=<server> 调度中心地址,多值英文逗号分隔,格式 IP:Port OR domain
|
||||
-V, --version Print version information and exit.
|
||||
|
||||
@ -422,11 +419,8 @@ OhMyScheduler-Worker代理
|
||||
|
||||
<nav id="TableOfContents">
|
||||
<ul>
|
||||
<li><a href="#基于宿主应用的执行器初始化">基于宿主应用的执行器初始化</a>
|
||||
<ul>
|
||||
<li></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#基于宿主应用的执行器初始化">基于宿主应用的执行器初始化</a></li>
|
||||
<li><a href="#基于agent的执行器初始化">基于agent的执行器初始化</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
|
@ -5,20 +5,22 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="处理器概述 OhMyScheduler当前支持Shell、Python等脚本处理器和Java处理器。脚本处理器只需要开发者完成脚本的编写(xxx.sh / xxx.py),在控制台填入脚本内容即可,本章不再赘述。本章将重点阐述Java处理器开发方法与使用技巧。
|
||||
Java处理器可根据代码所处位置划分为内置Java处理器和容器Java处理器,前者直接集成在宿主应用(也就是接入本系统的业务应用)中,一般用来处理业务需求;后者可以在一个独立的轻量级的Java工程中开发,通过容器技术(详见容器章节)被worker集群热加载,提供Java的“脚本能力”,一般用于处理灵活多变的需求。 Java处理器可根据对象创建者划分为SpringBean处理器和普通Java对象处理器,前者由Spring IOC容器完成处理器的创建和初始化,后者则有OhMyScheduler维护其状态。如果宿主应用支持Spring,强烈建议使用SpringBean处理器,开发者仅需要将Processor注册进Spring IOC容器(一个@Component注解或一句bean配置)。 Java处理器可根据功能划分为单机处理器、广播处理器、Map处理器和MapReduce处理器。 单机处理器对应了单机任务,即某个任务的某次运行只会有某一台机器的某一个线程参与运算。 广播处理器对应了广播任务,即某个任务的某次运行会调动集群内所有机器参与运算。 Map处理器对应了Map任务,即某个任务在运行过程中,允许产生子任务并分发到其他机器进行运算。 MapReduce处理器对应了MapReduce任务,在Map任务的基础上,增加了所有任务结束后的汇总统计。 初始化宿主应用 首先,添加相关的jar包依赖,最新依赖版本请参考maven中央仓库:推荐地址&备用地址
|
||||
<dependency> <groupId>com.github.kfcfans</groupId> <artifactId>oh-my-scheduler-worker</artifactId> <version>1.2.0</version> </dependency> ">
|
||||
<meta name="theme-color" content="#FFFFFF"><meta property="og:title" content="处理器编写" />
|
||||
Java处理器可根据代码所处位置划分为内置Java处理器和容器Java处理器,前者直接集成在宿主应用(也就是接入本系统的业务应用)中,一般用来处理业务需求;后者可以在一个独立的轻量级的Java工程中开发,通过容器技术(详见容器章节)被worker集群热加载,提供Java的“脚本能力”,一般用于处理灵活多变的需求。 Java处理器可根据对象创建者划分为SpringBean处理器和普通Java对象处理器,前者由Spring IOC容器完成处理器的创建和初始化,后者则有OhMyScheduler维护其状态。如果宿主应用支持Spring,强烈建议使用SpringBean处理器,开发者仅需要将Processor注册进Spring IOC容器(一个@Component注解或一句bean配置)。 Java处理器可根据功能划分为单机处理器、广播处理器、Map处理器和MapReduce处理器。 单机处理器(BasicProcessor)对应了单机任务,即某个任务的某次运行只会有某一台机器的某一个线程参与运算。 广播处理器(BroadcastProcessor)对应了广播任务,即某个任务的某次运行会调动集群内所有机器参与运算。 Map处理器(MapProcessor)对应了Map任务,即某个任务在运行过程中,允许产生子任务并分发到其他机器进行运算。 MapReduce处理器(MapReduceProcessor)对应了MapReduce任务,在Map任务的基础上,增加了所有任务结束后的汇总统计。 核心方法:process 任意Java处理器都需要实现处理的核心方法,其接口签名如下:
|
||||
ProcessResult process(TaskContext context) throws Exception; 方法入参TaskContext,包含了本次处理的上下文信息,具体属性如下:
|
||||
属性名称 意义/用法 jobId 任务ID,开发者一般无需关心此参数 instanceId 任务实例ID,全局唯一,开发者一般无需关心此参数 subInstanceId 子任务实例ID,秒级任务使用,开发者一般无需关心此参数 taskId 采用链式命名法的ID,在某个任务实例内唯一,开发者一般无需关心此参数 taskName task名称,Map/MapReduce任务的子任务的值为开发者指定,否则为系统默认值,开发者一般无需关心此参数 jobParams 任务参数,其值等同于控制台录入的任务参数,常用! instanceParams 任务实例参数,其值等同于使用OpenAPI运行任务实例时传递的参数,常用! maxRetryTimes Task的最大重试次数 currentRetryTimes Task的当前重试次数,和maxRetryTimes联合起来可以判断当前是否为该Task的最后一次运行机会 subTask 子Task,Map/MapReduce处理器专属,开发者调用map方法时传递的子任务列表中的某一个 omsLogger 在线日志,用法同Slf4J,记录的日志可以直接通过控制台查看,非常便捷和强大!不过使用过程中需要注意频率,可能对Server造成巨大的压力 方法的返回值为ProcessResult,代表了本次Task执行的结果,包含success和msg两个属性,分别用于传递Task是否执行成功和Task需要返回的信息。">
|
||||
<meta name="theme-color" content="#FFFFFF"><meta property="og:title" content="处理器开发" />
|
||||
<meta property="og:description" content="处理器概述 OhMyScheduler当前支持Shell、Python等脚本处理器和Java处理器。脚本处理器只需要开发者完成脚本的编写(xxx.sh / xxx.py),在控制台填入脚本内容即可,本章不再赘述。本章将重点阐述Java处理器开发方法与使用技巧。
|
||||
Java处理器可根据代码所处位置划分为内置Java处理器和容器Java处理器,前者直接集成在宿主应用(也就是接入本系统的业务应用)中,一般用来处理业务需求;后者可以在一个独立的轻量级的Java工程中开发,通过容器技术(详见容器章节)被worker集群热加载,提供Java的“脚本能力”,一般用于处理灵活多变的需求。 Java处理器可根据对象创建者划分为SpringBean处理器和普通Java对象处理器,前者由Spring IOC容器完成处理器的创建和初始化,后者则有OhMyScheduler维护其状态。如果宿主应用支持Spring,强烈建议使用SpringBean处理器,开发者仅需要将Processor注册进Spring IOC容器(一个@Component注解或一句bean配置)。 Java处理器可根据功能划分为单机处理器、广播处理器、Map处理器和MapReduce处理器。 单机处理器对应了单机任务,即某个任务的某次运行只会有某一台机器的某一个线程参与运算。 广播处理器对应了广播任务,即某个任务的某次运行会调动集群内所有机器参与运算。 Map处理器对应了Map任务,即某个任务在运行过程中,允许产生子任务并分发到其他机器进行运算。 MapReduce处理器对应了MapReduce任务,在Map任务的基础上,增加了所有任务结束后的汇总统计。 初始化宿主应用 首先,添加相关的jar包依赖,最新依赖版本请参考maven中央仓库:推荐地址&备用地址
|
||||
<dependency> <groupId>com.github.kfcfans</groupId> <artifactId>oh-my-scheduler-worker</artifactId> <version>1.2.0</version> </dependency> " />
|
||||
Java处理器可根据代码所处位置划分为内置Java处理器和容器Java处理器,前者直接集成在宿主应用(也就是接入本系统的业务应用)中,一般用来处理业务需求;后者可以在一个独立的轻量级的Java工程中开发,通过容器技术(详见容器章节)被worker集群热加载,提供Java的“脚本能力”,一般用于处理灵活多变的需求。 Java处理器可根据对象创建者划分为SpringBean处理器和普通Java对象处理器,前者由Spring IOC容器完成处理器的创建和初始化,后者则有OhMyScheduler维护其状态。如果宿主应用支持Spring,强烈建议使用SpringBean处理器,开发者仅需要将Processor注册进Spring IOC容器(一个@Component注解或一句bean配置)。 Java处理器可根据功能划分为单机处理器、广播处理器、Map处理器和MapReduce处理器。 单机处理器(BasicProcessor)对应了单机任务,即某个任务的某次运行只会有某一台机器的某一个线程参与运算。 广播处理器(BroadcastProcessor)对应了广播任务,即某个任务的某次运行会调动集群内所有机器参与运算。 Map处理器(MapProcessor)对应了Map任务,即某个任务在运行过程中,允许产生子任务并分发到其他机器进行运算。 MapReduce处理器(MapReduceProcessor)对应了MapReduce任务,在Map任务的基础上,增加了所有任务结束后的汇总统计。 核心方法:process 任意Java处理器都需要实现处理的核心方法,其接口签名如下:
|
||||
ProcessResult process(TaskContext context) throws Exception; 方法入参TaskContext,包含了本次处理的上下文信息,具体属性如下:
|
||||
属性名称 意义/用法 jobId 任务ID,开发者一般无需关心此参数 instanceId 任务实例ID,全局唯一,开发者一般无需关心此参数 subInstanceId 子任务实例ID,秒级任务使用,开发者一般无需关心此参数 taskId 采用链式命名法的ID,在某个任务实例内唯一,开发者一般无需关心此参数 taskName task名称,Map/MapReduce任务的子任务的值为开发者指定,否则为系统默认值,开发者一般无需关心此参数 jobParams 任务参数,其值等同于控制台录入的任务参数,常用! instanceParams 任务实例参数,其值等同于使用OpenAPI运行任务实例时传递的参数,常用! maxRetryTimes Task的最大重试次数 currentRetryTimes Task的当前重试次数,和maxRetryTimes联合起来可以判断当前是否为该Task的最后一次运行机会 subTask 子Task,Map/MapReduce处理器专属,开发者调用map方法时传递的子任务列表中的某一个 omsLogger 在线日志,用法同Slf4J,记录的日志可以直接通过控制台查看,非常便捷和强大!不过使用过程中需要注意频率,可能对Server造成巨大的压力 方法的返回值为ProcessResult,代表了本次Task执行的结果,包含success和msg两个属性,分别用于传递Task是否执行成功和Task需要返回的信息。" />
|
||||
<meta property="og:type" content="article" />
|
||||
<meta property="og:url" content="https://kfcfans.gitee.io/ohmyscheduler/docs/startup/3-processor-develop/" />
|
||||
<meta property="og:url" content="https://kfcfans.gitee.io/docs/startup/3-processor-develop/" />
|
||||
|
||||
<title>处理器编写 | OhMyScheduler</title>
|
||||
<link rel="manifest" href="/ohmyscheduler/manifest.json">
|
||||
<link rel="icon" href="/ohmyscheduler/favicon.png" type="image/x-icon">
|
||||
<link rel="stylesheet" href="/ohmyscheduler/book.min.e161f1fe2b283b6a43c29a52fde96e2387fade573e78efa6701d44c8499da76b.css" integrity="sha256-4WHx/isoO2pDwppS/eluI4f63lc+eO+mcB1EyEmdp2s=">
|
||||
<script defer src="/ohmyscheduler/en.search.min.1272dfb3df2a3f60e11485e0a1158d434da32177db3be3e28aae8e28aa7e9a15.js" integrity="sha256-EnLfs98qP2DhFIXgoRWNQ02jIXfbO+Piiq6OKKp+mhU="></script>
|
||||
<title>处理器开发 | OhMyScheduler</title>
|
||||
<link rel="manifest" href="/manifest.json">
|
||||
<link rel="icon" href="/favicon.png" type="image/x-icon">
|
||||
<link rel="stylesheet" href="/book.min.e161f1fe2b283b6a43c29a52fde96e2387fade573e78efa6701d44c8499da76b.css" integrity="sha256-4WHx/isoO2pDwppS/eluI4f63lc+eO+mcB1EyEmdp2s=">
|
||||
<script defer src="/en.search.min.c80848d3c77260233d9a08502d528e5cb516bb11e5df300ef34c5507c61f37fd.js" integrity="sha256-yAhI08dyYCM9mghQLVKOXLUWuxHl3zAO80xVB8YfN/0="></script>
|
||||
<!--
|
||||
Made with Book Theme
|
||||
https://github.com/alex-shpak/hugo-book
|
||||
@ -34,7 +36,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
|
||||
<nav>
|
||||
<h2 class="book-brand">
|
||||
<a href="/ohmyscheduler"><span>OhMyScheduler</span>
|
||||
<a href="/"><span>OhMyScheduler</span>
|
||||
</a>
|
||||
</h2>
|
||||
|
||||
@ -86,7 +88,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/startup/1-server-startup/" class="">调度中心(Server)部署</a>
|
||||
<a href="/docs/startup/1-server-startup/" class="">调度中心(Server)部署</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -96,7 +98,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/startup/2-worker-startup/" class="">执行器(Worker)初始化</a>
|
||||
<a href="/docs/startup/2-worker-startup/" class="">执行器(Worker)初始化</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -106,7 +108,17 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/startup/3-processor-develop/" class="active">处理器编写</a>
|
||||
<a href="/docs/startup/3-processor-develop/" class="active">处理器开发</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/docs/startup/4-console-guide/" class="">任务管理与在线运维</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -119,10 +131,10 @@ https://github.com/alex-shpak/hugo-book
|
||||
|
||||
|
||||
|
||||
<li class="book-section-flat" >
|
||||
<li>
|
||||
|
||||
|
||||
<span>Shortcodes</span>
|
||||
<span>高级特性</span>
|
||||
|
||||
|
||||
|
||||
@ -137,7 +149,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/columns/" class="">Columns</a>
|
||||
<a href="/docs/super/container/" class="">容器</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -147,7 +159,13 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/details/" class="">Details</a>
|
||||
<a href="/docs/super/openapi/" class="">OpenAPI</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
</li>
|
||||
@ -157,51 +175,16 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/expand/" class="">Expand</a>
|
||||
<span>更新日志</span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/hints/" class="">Hints</a>
|
||||
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/katex/" class="">Katex</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/mermaid/" class="">Mermaid</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/tabs/" class="">Tabs</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<ul>
|
||||
|
||||
</ul>
|
||||
|
||||
@ -242,13 +225,13 @@ https://github.com/alex-shpak/hugo-book
|
||||
|
||||
<div class="flex align-center justify-between">
|
||||
<label for="menu-control">
|
||||
<img src="/ohmyscheduler/svg/menu.svg" class="book-icon" alt="Menu" />
|
||||
<img src="/svg/menu.svg" class="book-icon" alt="Menu" />
|
||||
</label>
|
||||
|
||||
<strong>处理器编写</strong>
|
||||
<strong>处理器开发</strong>
|
||||
|
||||
<label for="toc-control">
|
||||
<img src="/ohmyscheduler/svg/toc.svg" class="book-icon" alt="Table of Contents" />
|
||||
<img src="/svg/toc.svg" class="book-icon" alt="Table of Contents" />
|
||||
</label>
|
||||
</div>
|
||||
|
||||
@ -260,7 +243,13 @@ https://github.com/alex-shpak/hugo-book
|
||||
<nav id="TableOfContents">
|
||||
<ul>
|
||||
<li><a href="#处理器概述">处理器概述</a></li>
|
||||
<li><a href="#初始化宿主应用">初始化宿主应用</a></li>
|
||||
<li><a href="#核心方法process">核心方法:process</a></li>
|
||||
<li><a href="#单机处理器basicprocessor">单机处理器:BasicProcessor</a></li>
|
||||
<li><a href="#广播处理器broadcastprocessor">广播处理器:BroadcastProcessor</a></li>
|
||||
<li><a href="#并行处理器mapreduceprocessor">并行处理器:MapReduceProcessor</a></li>
|
||||
<li><a href="#最佳实践mapreduce实现静态分片">最佳实践:MapReduce实现静态分片</a></li>
|
||||
<li><a href="#最佳实践mapreduce多级分发处理">最佳实践:MapReduce多级分发处理</a></li>
|
||||
<li><a href="#更多示例">更多示例</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
@ -281,21 +270,281 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>Java处理器可根据<strong>对象创建者</strong>划分为SpringBean处理器和普通Java对象处理器,前者由Spring IOC容器完成处理器的创建和初始化,后者则有OhMyScheduler维护其状态。如果宿主应用支持Spring,<strong>强烈建议使用SpringBean处理器</strong>,开发者仅需要将Processor注册进Spring IOC容器(一个<code>@Component</code>注解或一句<code>bean</code>配置)。</li>
|
||||
<li>Java处理器可根据<strong>功能</strong>划分为单机处理器、广播处理器、Map处理器和MapReduce处理器。
|
||||
<ul>
|
||||
<li>单机处理器对应了单机任务,即某个任务的某次运行只会有某一台机器的某一个线程参与运算。</li>
|
||||
<li>广播处理器对应了广播任务,即某个任务的某次运行会<strong>调动集群内所有机器参与运算</strong>。</li>
|
||||
<li>Map处理器对应了Map任务,即某个任务在运行过程中,<strong>允许产生子任务并分发到其他机器进行运算</strong>。</li>
|
||||
<li>MapReduce处理器对应了MapReduce任务,在Map任务的基础上,<strong>增加了所有任务结束后的汇总统计</strong>。</li>
|
||||
<li>单机处理器(<code>BasicProcessor</code>)对应了单机任务,即某个任务的某次运行只会有某一台机器的某一个线程参与运算。</li>
|
||||
<li>广播处理器(<code>BroadcastProcessor</code>)对应了广播任务,即某个任务的某次运行会<strong>调动集群内所有机器参与运算</strong>。</li>
|
||||
<li>Map处理器(<code>MapProcessor</code>)对应了Map任务,即某个任务在运行过程中,<strong>允许产生子任务并分发到其他机器进行运算</strong>。</li>
|
||||
<li>MapReduce处理器(<code>MapReduceProcessor</code>)对应了MapReduce任务,在Map任务的基础上,<strong>增加了所有任务结束后的汇总统计</strong>。</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="初始化宿主应用">初始化宿主应用</h2>
|
||||
<p>首先,添加相关的jar包依赖,最新依赖版本请参考maven中央仓库:<a href="https://search.maven.org/search?q=oh-my-scheduler-worker">推荐地址</a>&<a href="https://mvnrepository.com/search?q=com.github.kfcfans">备用地址</a></p>
|
||||
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml"><span style="color:#f92672"><dependency></span>
|
||||
<span style="color:#f92672"><groupId></span>com.github.kfcfans<span style="color:#f92672"></groupId></span>
|
||||
<span style="color:#f92672"><artifactId></span>oh-my-scheduler-worker<span style="color:#f92672"></artifactId></span>
|
||||
<span style="color:#f92672"><version></span>1.2.0<span style="color:#f92672"></version></span>
|
||||
<span style="color:#f92672"></dependency></span>
|
||||
</code></pre></div></article>
|
||||
<h2 id="核心方法process">核心方法:process</h2>
|
||||
<p>任意Java处理器都需要实现处理的核心方法,其接口签名如下:</p>
|
||||
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-java" data-lang="java">ProcessResult <span style="color:#a6e22e">process</span><span style="color:#f92672">(</span>TaskContext context<span style="color:#f92672">)</span> <span style="color:#66d9ef">throws</span> Exception<span style="color:#f92672">;</span>
|
||||
</code></pre></div><p>方法入参<code>TaskContext</code>,包含了本次处理的上下文信息,具体属性如下:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>属性名称</th>
|
||||
<th>意义/用法</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>jobId</td>
|
||||
<td>任务ID,开发者一般无需关心此参数</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>instanceId</td>
|
||||
<td>任务实例ID,全局唯一,开发者一般无需关心此参数</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>subInstanceId</td>
|
||||
<td>子任务实例ID,秒级任务使用,开发者一般无需关心此参数</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>taskId</td>
|
||||
<td>采用链式命名法的ID,在某个任务实例内唯一,开发者一般无需关心此参数</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>taskName</td>
|
||||
<td>task名称,Map/MapReduce任务的子任务的值为开发者指定,否则为系统默认值,开发者一般无需关心此参数</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>jobParams</td>
|
||||
<td>任务参数,其值等同于控制台录入的<strong>任务参数</strong>,常用!</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>instanceParams</td>
|
||||
<td>任务实例参数,其值等同于使用OpenAPI运行任务实例时传递的参数,常用!</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>maxRetryTimes</td>
|
||||
<td>Task的最大重试次数</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>currentRetryTimes</td>
|
||||
<td>Task的当前重试次数,和maxRetryTimes联合起来可以判断当前是否为该Task的最后一次运行机会</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>subTask</td>
|
||||
<td>子Task,Map/MapReduce处理器专属,开发者调用map方法时传递的子任务列表中的某一个</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>omsLogger</td>
|
||||
<td>在线日志,用法同Slf4J,记录的日志可以直接通过控制台查看,非常便捷和强大!不过使用过程中需要注意频率,可能对Server造成巨大的压力</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>方法的返回值为<code>ProcessResult</code>,代表了本次Task执行的结果,包含<code>success</code>和<code>msg</code>两个属性,分别用于传递Task是否执行成功和Task需要返回的信息。</p>
|
||||
<h2 id="单机处理器basicprocessor">单机处理器:BasicProcessor</h2>
|
||||
<p>单机执行的策略下,server会在所有可用worker中选取健康度最佳的机器进行执行。单机执行任务需要实现接口:<code>BasicProcessor</code>,代码示例如下:</p>
|
||||
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-java" data-lang="java"><span style="color:#75715e">// 支持 SpringBean 的形式
|
||||
</span><span style="color:#75715e"></span><span style="color:#a6e22e">@Component</span>
|
||||
<span style="color:#66d9ef">public</span> <span style="color:#66d9ef">class</span> <span style="color:#a6e22e">BasicProcessorDemo</span> <span style="color:#66d9ef">implements</span> BasicProcessor <span style="color:#f92672">{</span>
|
||||
|
||||
<span style="color:#a6e22e">@Resource</span>
|
||||
<span style="color:#66d9ef">private</span> MysteryService mysteryService<span style="color:#f92672">;</span>
|
||||
|
||||
<span style="color:#a6e22e">@Override</span>
|
||||
<span style="color:#66d9ef">public</span> ProcessResult <span style="color:#a6e22e">process</span><span style="color:#f92672">(</span>TaskContext context<span style="color:#f92672">)</span> <span style="color:#66d9ef">throws</span> Exception <span style="color:#f92672">{</span>
|
||||
|
||||
<span style="color:#75715e">// 在线日志功能,可以直接在控制台查看任务日志,非常便捷
|
||||
</span><span style="color:#75715e"></span> OmsLogger omsLogger <span style="color:#f92672">=</span> context<span style="color:#f92672">.</span><span style="color:#a6e22e">getOmsLogger</span><span style="color:#f92672">();</span>
|
||||
omsLogger<span style="color:#f92672">.</span><span style="color:#a6e22e">info</span><span style="color:#f92672">(</span><span style="color:#e6db74">"BasicProcessorDemo start to process, current JobParams is {}."</span><span style="color:#f92672">,</span> context<span style="color:#f92672">.</span><span style="color:#a6e22e">getJobParams</span><span style="color:#f92672">());</span>
|
||||
|
||||
<span style="color:#75715e">// TaskContext为任务的上下文信息,包含了在控制台录入的任务元数据,常用字段为
|
||||
</span><span style="color:#75715e"></span> <span style="color:#75715e">// jobParams(任务参数,在控制台录入),instanceParams(任务实例参数,通过 OpenAPI 触发的任务实例才可能存在该参数)
|
||||
</span><span style="color:#75715e"></span>
|
||||
<span style="color:#75715e">// 进行实际处理...
|
||||
</span><span style="color:#75715e"></span> mysteryService<span style="color:#f92672">.</span><span style="color:#a6e22e">hasaki</span><span style="color:#f92672">();</span>
|
||||
|
||||
<span style="color:#75715e">// 返回结果,该结果会被持久化到数据库,在前端页面直接查看,极为方便
|
||||
</span><span style="color:#75715e"></span> <span style="color:#66d9ef">return</span> <span style="color:#66d9ef">new</span> ProcessResult<span style="color:#f92672">(</span><span style="color:#66d9ef">true</span><span style="color:#f92672">,</span> <span style="color:#e6db74">"result is xxx"</span><span style="color:#f92672">);</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
</code></pre></div><h2 id="广播处理器broadcastprocessor">广播处理器:BroadcastProcessor</h2>
|
||||
<p>广播执行的策略下,所有机器都会被调度执行该任务。为了便于资源的准备和释放,广播处理器在<code>BasicProcessor</code>的基础上额外增加了<code>preProcess</code>和<code>postProcess</code>方法,分别在整个集群开始之前/结束之后<strong>选一台机器</strong>执行相关方法。代码示例如下:</p>
|
||||
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-java" data-lang="java"><span style="color:#a6e22e">@Component</span>
|
||||
<span style="color:#66d9ef">public</span> <span style="color:#66d9ef">class</span> <span style="color:#a6e22e">BroadcastProcessorDemo</span> <span style="color:#66d9ef">extends</span> BroadcastProcessor <span style="color:#f92672">{</span>
|
||||
|
||||
<span style="color:#a6e22e">@Override</span>
|
||||
<span style="color:#66d9ef">public</span> ProcessResult <span style="color:#a6e22e">preProcess</span><span style="color:#f92672">(</span>TaskContext taskContext<span style="color:#f92672">)</span> <span style="color:#66d9ef">throws</span> Exception <span style="color:#f92672">{</span>
|
||||
<span style="color:#75715e">// 预执行,会在所有 worker 执行 process 方法前调用
|
||||
</span><span style="color:#75715e"></span> <span style="color:#66d9ef">return</span> <span style="color:#66d9ef">new</span> ProcessResult<span style="color:#f92672">(</span><span style="color:#66d9ef">true</span><span style="color:#f92672">,</span> <span style="color:#e6db74">"init success"</span><span style="color:#f92672">);</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
|
||||
<span style="color:#a6e22e">@Override</span>
|
||||
<span style="color:#66d9ef">public</span> ProcessResult <span style="color:#a6e22e">process</span><span style="color:#f92672">(</span>TaskContext context<span style="color:#f92672">)</span> <span style="color:#66d9ef">throws</span> Exception <span style="color:#f92672">{</span>
|
||||
<span style="color:#75715e">// 撰写整个worker集群都会执行的代码逻辑
|
||||
</span><span style="color:#75715e"></span> <span style="color:#66d9ef">return</span> <span style="color:#66d9ef">new</span> ProcessResult<span style="color:#f92672">(</span><span style="color:#66d9ef">true</span><span style="color:#f92672">,</span> <span style="color:#e6db74">"release resource success"</span><span style="color:#f92672">);</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
|
||||
<span style="color:#a6e22e">@Override</span>
|
||||
<span style="color:#66d9ef">public</span> ProcessResult <span style="color:#a6e22e">postProcess</span><span style="color:#f92672">(</span>TaskContext taskContext<span style="color:#f92672">,</span> List<span style="color:#f92672"><</span>TaskResult<span style="color:#f92672">></span> taskResults<span style="color:#f92672">)</span> <span style="color:#66d9ef">throws</span> Exception <span style="color:#f92672">{</span>
|
||||
|
||||
<span style="color:#75715e">// taskResults 存储了所有worker执行的结果(包括preProcess)
|
||||
</span><span style="color:#75715e"></span>
|
||||
<span style="color:#75715e">// 收尾,会在所有 worker 执行完毕 process 方法后调用,该结果将作为最终的执行结果
|
||||
</span><span style="color:#75715e"></span> <span style="color:#66d9ef">return</span> <span style="color:#66d9ef">new</span> ProcessResult<span style="color:#f92672">(</span><span style="color:#66d9ef">true</span><span style="color:#f92672">,</span> <span style="color:#e6db74">"process success"</span><span style="color:#f92672">);</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
</code></pre></div><h2 id="并行处理器mapreduceprocessor">并行处理器:MapReduceProcessor</h2>
|
||||
<p>MapReduce是最复杂也是最强大的一种执行器,它允许开发者完成任务的拆分,将子任务派发到集群中其他Worker执行,是执行大批量处理任务的不二之选!实现MapReduce处理器需要继承<code>MapReduceProcessor</code>类,具体用法如下示例代码所示:</p>
|
||||
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-java" data-lang="java"><span style="color:#a6e22e">@Component</span>
|
||||
<span style="color:#66d9ef">public</span> <span style="color:#66d9ef">class</span> <span style="color:#a6e22e">MapReduceProcessorDemo</span> <span style="color:#66d9ef">extends</span> MapReduceProcessor <span style="color:#f92672">{</span>
|
||||
|
||||
<span style="color:#a6e22e">@Override</span>
|
||||
<span style="color:#66d9ef">public</span> ProcessResult <span style="color:#a6e22e">process</span><span style="color:#f92672">(</span>TaskContext context<span style="color:#f92672">)</span> <span style="color:#66d9ef">throws</span> Exception <span style="color:#f92672">{</span>
|
||||
<span style="color:#75715e">// 判断是否为根任务
|
||||
</span><span style="color:#75715e"></span> <span style="color:#66d9ef">if</span> <span style="color:#f92672">(</span>isRootTask<span style="color:#f92672">())</span> <span style="color:#f92672">{</span>
|
||||
|
||||
<span style="color:#75715e">// 构造子任务
|
||||
</span><span style="color:#75715e"></span> List<span style="color:#f92672"><</span>SubTask<span style="color:#f92672">></span> subTaskList <span style="color:#f92672">=</span> Lists<span style="color:#f92672">.</span><span style="color:#a6e22e">newLinkedList</span><span style="color:#f92672">();</span>
|
||||
|
||||
<span style="color:#75715e">/*
|
||||
</span><span style="color:#75715e"> * 子任务的构造由开发者自己定义
|
||||
</span><span style="color:#75715e"> * eg. 现在需要从文件中读取100W个ID,并处理数据库中这些ID对应的数据,那么步骤如下:
|
||||
</span><span style="color:#75715e"> * 1. 根任务(RootTask)读取文件,流式拉取100W个ID,并按1000个一批的大小组装成子任务进行派发
|
||||
</span><span style="color:#75715e"> * 2. 非根任务获取子任务,完成业务逻辑的处理
|
||||
</span><span style="color:#75715e"> */</span>
|
||||
|
||||
<span style="color:#75715e">// 调用 map 方法,派发子任务
|
||||
</span><span style="color:#75715e"></span> <span style="color:#66d9ef">return</span> map<span style="color:#f92672">(</span>subTaskList<span style="color:#f92672">,</span> <span style="color:#e6db74">"DATA_PROCESS_TASK"</span><span style="color:#f92672">);</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
|
||||
<span style="color:#75715e">// 非子任务,可根据 subTask 的类型 或 TaskName 来判断分支
|
||||
</span><span style="color:#75715e"></span> <span style="color:#66d9ef">if</span> <span style="color:#f92672">(</span>context<span style="color:#f92672">.</span><span style="color:#a6e22e">getSubTask</span><span style="color:#f92672">()</span> <span style="color:#66d9ef">instanceof</span> SubTask<span style="color:#f92672">)</span> <span style="color:#f92672">{</span>
|
||||
<span style="color:#75715e">// 执行子任务,注:子任务人可以 map 产生新的子任务,可以构建任意级的 MapReduce 处理器
|
||||
</span><span style="color:#75715e"></span> <span style="color:#66d9ef">return</span> <span style="color:#66d9ef">new</span> ProcessResult<span style="color:#f92672">(</span><span style="color:#66d9ef">true</span><span style="color:#f92672">,</span> <span style="color:#e6db74">"PROCESS_SUB_TASK_SUCCESS"</span><span style="color:#f92672">);</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
|
||||
<span style="color:#66d9ef">return</span> <span style="color:#66d9ef">new</span> ProcessResult<span style="color:#f92672">(</span><span style="color:#66d9ef">false</span><span style="color:#f92672">,</span> <span style="color:#e6db74">"UNKNOWN_BUG"</span><span style="color:#f92672">);</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
|
||||
<span style="color:#a6e22e">@Override</span>
|
||||
<span style="color:#66d9ef">public</span> ProcessResult <span style="color:#a6e22e">reduce</span><span style="color:#f92672">(</span>TaskContext taskContext<span style="color:#f92672">,</span> List<span style="color:#f92672"><</span>TaskResult<span style="color:#f92672">></span> taskResults<span style="color:#f92672">)</span> <span style="color:#f92672">{</span>
|
||||
|
||||
<span style="color:#75715e">// 所有 Task 执行结束后,reduce 将会被执行
|
||||
</span><span style="color:#75715e"></span> <span style="color:#75715e">// taskResults 保存了所有子任务的执行结果
|
||||
</span><span style="color:#75715e"></span>
|
||||
<span style="color:#75715e">// 用法举例,统计执行结果
|
||||
</span><span style="color:#75715e"></span> AtomicLong successCnt <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> AtomicLong<span style="color:#f92672">(</span>0<span style="color:#f92672">);</span>
|
||||
taskResults<span style="color:#f92672">.</span><span style="color:#a6e22e">forEach</span><span style="color:#f92672">(</span>tr <span style="color:#f92672">-></span> <span style="color:#f92672">{</span>
|
||||
<span style="color:#66d9ef">if</span> <span style="color:#f92672">(</span>tr<span style="color:#f92672">.</span><span style="color:#a6e22e">isSuccess</span><span style="color:#f92672">())</span> <span style="color:#f92672">{</span>
|
||||
successCnt<span style="color:#f92672">.</span><span style="color:#a6e22e">incrementAndGet</span><span style="color:#f92672">();</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
<span style="color:#f92672">});</span>
|
||||
<span style="color:#75715e">// 该结果将作为任务最终的执行结果
|
||||
</span><span style="color:#75715e"></span> <span style="color:#66d9ef">return</span> <span style="color:#66d9ef">new</span> ProcessResult<span style="color:#f92672">(</span><span style="color:#66d9ef">true</span><span style="color:#f92672">,</span> <span style="color:#e6db74">"success task num:"</span> <span style="color:#f92672">+</span> successCnt<span style="color:#f92672">.</span><span style="color:#a6e22e">get</span><span style="color:#f92672">());</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
|
||||
<span style="color:#75715e">// 自定义的子任务
|
||||
</span><span style="color:#75715e"></span> <span style="color:#66d9ef">private</span> <span style="color:#66d9ef">static</span> <span style="color:#66d9ef">class</span> <span style="color:#a6e22e">SubTask</span> <span style="color:#f92672">{</span>
|
||||
<span style="color:#66d9ef">private</span> Long siteId<span style="color:#f92672">;</span>
|
||||
<span style="color:#66d9ef">private</span> List<span style="color:#f92672"><</span>Long<span style="color:#f92672">></span> idList<span style="color:#f92672">;</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
</code></pre></div><p>注:Map处理器相当于MapReduce处理器的阉割版本(阉割了<code>reduce</code>方法),此处不再单独举例。</p>
|
||||
<h2 id="最佳实践mapreduce实现静态分片">最佳实践:MapReduce实现静态分片</h2>
|
||||
<p>虽然说这有点傻鸡焉用牛刀的感觉,不过既然目前市场上同类产品都处于静态分片的阶段,我也就在这里给大家举个例子吧~</p>
|
||||
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-java" data-lang="java"><span style="color:#a6e22e">@Component</span>
|
||||
<span style="color:#66d9ef">public</span> <span style="color:#66d9ef">class</span> <span style="color:#a6e22e">StaticSliceProcessor</span> <span style="color:#66d9ef">extends</span> MapReduceProcessor <span style="color:#f92672">{</span>
|
||||
|
||||
<span style="color:#a6e22e">@Override</span>
|
||||
<span style="color:#66d9ef">public</span> ProcessResult <span style="color:#a6e22e">process</span><span style="color:#f92672">(</span>TaskContext context<span style="color:#f92672">)</span> <span style="color:#66d9ef">throws</span> Exception <span style="color:#f92672">{</span>
|
||||
OmsLogger omsLogger <span style="color:#f92672">=</span> context<span style="color:#f92672">.</span><span style="color:#a6e22e">getOmsLogger</span><span style="color:#f92672">();</span>
|
||||
|
||||
<span style="color:#75715e">// root task 负责分发任务
|
||||
</span><span style="color:#75715e"></span> <span style="color:#66d9ef">if</span> <span style="color:#f92672">(</span>isRootTask<span style="color:#f92672">())</span> <span style="color:#f92672">{</span>
|
||||
<span style="color:#75715e">// 从控制台传递分片参数,架设格式为KV:1=a&2=b&3=c
|
||||
</span><span style="color:#75715e"></span> String jobParams <span style="color:#f92672">=</span> context<span style="color:#f92672">.</span><span style="color:#a6e22e">getJobParams</span><span style="color:#f92672">();</span>
|
||||
Map<span style="color:#f92672"><</span>String<span style="color:#f92672">,</span> String<span style="color:#f92672">></span> paramsMap <span style="color:#f92672">=</span> Splitter<span style="color:#f92672">.</span><span style="color:#a6e22e">on</span><span style="color:#f92672">(</span><span style="color:#e6db74">"&"</span><span style="color:#f92672">).</span><span style="color:#a6e22e">withKeyValueSeparator</span><span style="color:#f92672">(</span><span style="color:#e6db74">"="</span><span style="color:#f92672">).</span><span style="color:#a6e22e">split</span><span style="color:#f92672">(</span>jobParams<span style="color:#f92672">);</span>
|
||||
|
||||
List<span style="color:#f92672"><</span>SubTask<span style="color:#f92672">></span> subTasks <span style="color:#f92672">=</span> Lists<span style="color:#f92672">.</span><span style="color:#a6e22e">newLinkedList</span><span style="color:#f92672">();</span>
|
||||
paramsMap<span style="color:#f92672">.</span><span style="color:#a6e22e">forEach</span><span style="color:#f92672">((</span>k<span style="color:#f92672">,</span> v<span style="color:#f92672">)</span> <span style="color:#f92672">-></span> subTasks<span style="color:#f92672">.</span><span style="color:#a6e22e">add</span><span style="color:#f92672">(</span><span style="color:#66d9ef">new</span> SubTask<span style="color:#f92672">(</span>Integer<span style="color:#f92672">.</span><span style="color:#a6e22e">parseInt</span><span style="color:#f92672">(</span>k<span style="color:#f92672">),</span> v<span style="color:#f92672">)));</span>
|
||||
<span style="color:#66d9ef">return</span> map<span style="color:#f92672">(</span>subTasks<span style="color:#f92672">,</span> <span style="color:#e6db74">"SLICE_TASK"</span><span style="color:#f92672">);</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
|
||||
Object subTask <span style="color:#f92672">=</span> context<span style="color:#f92672">.</span><span style="color:#a6e22e">getSubTask</span><span style="color:#f92672">();</span>
|
||||
<span style="color:#66d9ef">if</span> <span style="color:#f92672">(</span>subTask <span style="color:#66d9ef">instanceof</span> SubTask<span style="color:#f92672">)</span> <span style="color:#f92672">{</span>
|
||||
<span style="color:#75715e">// 实际处理
|
||||
</span><span style="color:#75715e"></span> <span style="color:#75715e">// 当然,如果觉得 subTask 还是很大,也可以继续分发哦
|
||||
</span><span style="color:#75715e"></span>
|
||||
<span style="color:#66d9ef">return</span> <span style="color:#66d9ef">new</span> ProcessResult<span style="color:#f92672">(</span><span style="color:#66d9ef">true</span><span style="color:#f92672">,</span> <span style="color:#e6db74">"subTask:"</span> <span style="color:#f92672">+</span> <span style="color:#f92672">((</span>SubTask<span style="color:#f92672">)</span> subTask<span style="color:#f92672">).</span><span style="color:#a6e22e">getIndex</span><span style="color:#f92672">()</span> <span style="color:#f92672">+</span> <span style="color:#e6db74">" process successfully"</span><span style="color:#f92672">);</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
<span style="color:#66d9ef">return</span> <span style="color:#66d9ef">new</span> ProcessResult<span style="color:#f92672">(</span><span style="color:#66d9ef">false</span><span style="color:#f92672">,</span> <span style="color:#e6db74">"UNKNOWN BUG"</span><span style="color:#f92672">);</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
|
||||
<span style="color:#a6e22e">@Override</span>
|
||||
<span style="color:#66d9ef">public</span> ProcessResult <span style="color:#a6e22e">reduce</span><span style="color:#f92672">(</span>TaskContext context<span style="color:#f92672">,</span> List<span style="color:#f92672"><</span>TaskResult<span style="color:#f92672">></span> taskResults<span style="color:#f92672">)</span> <span style="color:#f92672">{</span>
|
||||
<span style="color:#75715e">// 按需求做一些统计工作... 不需要的话,直接使用 Map 处理器即可
|
||||
</span><span style="color:#75715e"></span> <span style="color:#66d9ef">return</span> <span style="color:#66d9ef">new</span> ProcessResult<span style="color:#f92672">(</span><span style="color:#66d9ef">true</span><span style="color:#f92672">,</span> <span style="color:#e6db74">"xxxx"</span><span style="color:#f92672">);</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
|
||||
<span style="color:#a6e22e">@Getter</span>
|
||||
<span style="color:#a6e22e">@NoArgsConstructor</span>
|
||||
<span style="color:#a6e22e">@AllArgsConstructor</span>
|
||||
<span style="color:#66d9ef">private</span> <span style="color:#66d9ef">static</span> <span style="color:#66d9ef">class</span> <span style="color:#a6e22e">SubTask</span> <span style="color:#f92672">{</span>
|
||||
<span style="color:#66d9ef">private</span> <span style="color:#66d9ef">int</span> index<span style="color:#f92672">;</span>
|
||||
<span style="color:#66d9ef">private</span> String params<span style="color:#f92672">;</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
</code></pre></div><h2 id="最佳实践mapreduce多级分发处理">最佳实践:MapReduce多级分发处理</h2>
|
||||
<p>利用MapReduce实现 Root -> A -> B/C -> Reduce)的DAG 工作流。</p>
|
||||
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-java" data-lang="java"><span style="color:#a6e22e">@Component</span>
|
||||
<span style="color:#66d9ef">public</span> <span style="color:#66d9ef">class</span> <span style="color:#a6e22e">DAGSimulationProcessor</span> <span style="color:#66d9ef">extends</span> MapReduceProcessor <span style="color:#f92672">{</span>
|
||||
|
||||
<span style="color:#a6e22e">@Override</span>
|
||||
<span style="color:#66d9ef">public</span> ProcessResult <span style="color:#a6e22e">process</span><span style="color:#f92672">(</span>TaskContext context<span style="color:#f92672">)</span> <span style="color:#66d9ef">throws</span> Exception <span style="color:#f92672">{</span>
|
||||
|
||||
<span style="color:#66d9ef">if</span> <span style="color:#f92672">(</span>isRootTask<span style="color:#f92672">())</span> <span style="color:#f92672">{</span>
|
||||
<span style="color:#75715e">// L1. 执行根任务
|
||||
</span><span style="color:#75715e"></span>
|
||||
<span style="color:#75715e">// 执行完毕后产生子任务 A,需要传递的参数可以作为 TaskA 的属性进行传递
|
||||
</span><span style="color:#75715e"></span> TaskA taskA <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> TaskA<span style="color:#f92672">();</span>
|
||||
<span style="color:#66d9ef">return</span> map<span style="color:#f92672">(</span>Lists<span style="color:#f92672">.</span><span style="color:#a6e22e">newArrayList</span><span style="color:#f92672">(</span>taskA<span style="color:#f92672">),</span> <span style="color:#e6db74">"LEVEL1_TASK_A"</span><span style="color:#f92672">);</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
|
||||
<span style="color:#66d9ef">if</span> <span style="color:#f92672">(</span>context<span style="color:#f92672">.</span><span style="color:#a6e22e">getSubTask</span><span style="color:#f92672">()</span> <span style="color:#66d9ef">instanceof</span> TaskA<span style="color:#f92672">)</span> <span style="color:#f92672">{</span>
|
||||
<span style="color:#75715e">// L2. 执行A任务
|
||||
</span><span style="color:#75715e"></span>
|
||||
<span style="color:#75715e">// 执行完成后产生子任务 B,C(并行执行)
|
||||
</span><span style="color:#75715e"></span> TaskB taskB <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> TaskB<span style="color:#f92672">();</span>
|
||||
TaskC taskC <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> TaskC<span style="color:#f92672">();</span>
|
||||
<span style="color:#66d9ef">return</span> map<span style="color:#f92672">(</span>Lists<span style="color:#f92672">.</span><span style="color:#a6e22e">newArrayList</span><span style="color:#f92672">(</span>taskB<span style="color:#f92672">,</span> taskC<span style="color:#f92672">),</span> <span style="color:#e6db74">"LEVEL2_TASK_BC"</span><span style="color:#f92672">);</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
|
||||
<span style="color:#66d9ef">if</span> <span style="color:#f92672">(</span>context<span style="color:#f92672">.</span><span style="color:#a6e22e">getSubTask</span><span style="color:#f92672">()</span> <span style="color:#66d9ef">instanceof</span> TaskB<span style="color:#f92672">)</span> <span style="color:#f92672">{</span>
|
||||
<span style="color:#75715e">// L3. 执行B任务
|
||||
</span><span style="color:#75715e"></span> <span style="color:#66d9ef">return</span> <span style="color:#66d9ef">new</span> ProcessResult<span style="color:#f92672">(</span><span style="color:#66d9ef">true</span><span style="color:#f92672">,</span> <span style="color:#e6db74">"xxx"</span><span style="color:#f92672">);</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
<span style="color:#66d9ef">if</span> <span style="color:#f92672">(</span>context<span style="color:#f92672">.</span><span style="color:#a6e22e">getSubTask</span><span style="color:#f92672">()</span> <span style="color:#66d9ef">instanceof</span> TaskC<span style="color:#f92672">)</span> <span style="color:#f92672">{</span>
|
||||
<span style="color:#75715e">// L3. 执行C任务
|
||||
</span><span style="color:#75715e"></span> <span style="color:#66d9ef">return</span> <span style="color:#66d9ef">new</span> ProcessResult<span style="color:#f92672">(</span><span style="color:#66d9ef">true</span><span style="color:#f92672">,</span> <span style="color:#e6db74">"xxx"</span><span style="color:#f92672">);</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
|
||||
<span style="color:#66d9ef">return</span> <span style="color:#66d9ef">new</span> ProcessResult<span style="color:#f92672">(</span><span style="color:#66d9ef">false</span><span style="color:#f92672">,</span> <span style="color:#e6db74">"UNKNOWN_TYPE_OF_SUB_TASK"</span><span style="color:#f92672">);</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
|
||||
<span style="color:#a6e22e">@Override</span>
|
||||
<span style="color:#66d9ef">public</span> ProcessResult <span style="color:#a6e22e">reduce</span><span style="color:#f92672">(</span>TaskContext context<span style="color:#f92672">,</span> List<span style="color:#f92672"><</span>TaskResult<span style="color:#f92672">></span> taskResults<span style="color:#f92672">)</span> <span style="color:#f92672">{</span>
|
||||
<span style="color:#75715e">// L4. 执行最终 Reduce 任务,taskResults保存了之前所有任务的结果
|
||||
</span><span style="color:#75715e"></span> taskResults<span style="color:#f92672">.</span><span style="color:#a6e22e">forEach</span><span style="color:#f92672">(</span>taskResult <span style="color:#f92672">-></span> <span style="color:#f92672">{</span>
|
||||
<span style="color:#75715e">// do something...
|
||||
</span><span style="color:#75715e"></span> <span style="color:#f92672">});</span>
|
||||
<span style="color:#66d9ef">return</span> <span style="color:#66d9ef">new</span> ProcessResult<span style="color:#f92672">(</span><span style="color:#66d9ef">true</span><span style="color:#f92672">,</span> <span style="color:#e6db74">"reduce success"</span><span style="color:#f92672">);</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
|
||||
<span style="color:#66d9ef">private</span> <span style="color:#66d9ef">static</span> <span style="color:#66d9ef">class</span> <span style="color:#a6e22e">TaskA</span> <span style="color:#f92672">{</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
<span style="color:#66d9ef">private</span> <span style="color:#66d9ef">static</span> <span style="color:#66d9ef">class</span> <span style="color:#a6e22e">TaskB</span> <span style="color:#f92672">{</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
<span style="color:#66d9ef">private</span> <span style="color:#66d9ef">static</span> <span style="color:#66d9ef">class</span> <span style="color:#a6e22e">TaskC</span> <span style="color:#f92672">{</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
<span style="color:#f92672">}</span>
|
||||
</code></pre></div><h2 id="更多示例">更多示例</h2>
|
||||
<p>没看够?更多示例请见:<a href="https://github.com/KFCFans/OhMyScheduler/tree/master/oh-my-scheduler-worker-samples">oh-my-scheduler-worker-samples</a></p>
|
||||
</article>
|
||||
|
||||
|
||||
|
||||
@ -330,7 +579,13 @@ https://github.com/alex-shpak/hugo-book
|
||||
<nav id="TableOfContents">
|
||||
<ul>
|
||||
<li><a href="#处理器概述">处理器概述</a></li>
|
||||
<li><a href="#初始化宿主应用">初始化宿主应用</a></li>
|
||||
<li><a href="#核心方法process">核心方法:process</a></li>
|
||||
<li><a href="#单机处理器basicprocessor">单机处理器:BasicProcessor</a></li>
|
||||
<li><a href="#广播处理器broadcastprocessor">广播处理器:BroadcastProcessor</a></li>
|
||||
<li><a href="#并行处理器mapreduceprocessor">并行处理器:MapReduceProcessor</a></li>
|
||||
<li><a href="#最佳实践mapreduce实现静态分片">最佳实践:MapReduce实现静态分片</a></li>
|
||||
<li><a href="#最佳实践mapreduce多级分发处理">最佳实践:MapReduce多级分发处理</a></li>
|
||||
<li><a href="#更多示例">更多示例</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
|
@ -8,14 +8,14 @@
|
||||
<meta name="theme-color" content="#FFFFFF"><meta property="og:title" content="快速开始" />
|
||||
<meta property="og:description" content="" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="https://kfcfans.gitee.io/ohmyscheduler/docs/startup/" />
|
||||
<meta property="og:url" content="https://kfcfans.gitee.io/docs/startup/" />
|
||||
|
||||
<title>快速开始 | OhMyScheduler</title>
|
||||
<link rel="manifest" href="/ohmyscheduler/manifest.json">
|
||||
<link rel="icon" href="/ohmyscheduler/favicon.png" type="image/x-icon">
|
||||
<link rel="stylesheet" href="/ohmyscheduler/book.min.e161f1fe2b283b6a43c29a52fde96e2387fade573e78efa6701d44c8499da76b.css" integrity="sha256-4WHx/isoO2pDwppS/eluI4f63lc+eO+mcB1EyEmdp2s=">
|
||||
<script defer src="/ohmyscheduler/en.search.min.1272dfb3df2a3f60e11485e0a1158d434da32177db3be3e28aae8e28aa7e9a15.js" integrity="sha256-EnLfs98qP2DhFIXgoRWNQ02jIXfbO+Piiq6OKKp+mhU="></script>
|
||||
<link rel="alternate" type="application/rss+xml" href="https://kfcfans.gitee.io/ohmyscheduler/docs/startup/index.xml" title="OhMyScheduler" />
|
||||
<link rel="manifest" href="/manifest.json">
|
||||
<link rel="icon" href="/favicon.png" type="image/x-icon">
|
||||
<link rel="stylesheet" href="/book.min.e161f1fe2b283b6a43c29a52fde96e2387fade573e78efa6701d44c8499da76b.css" integrity="sha256-4WHx/isoO2pDwppS/eluI4f63lc+eO+mcB1EyEmdp2s=">
|
||||
<script defer src="/en.search.min.c80848d3c77260233d9a08502d528e5cb516bb11e5df300ef34c5507c61f37fd.js" integrity="sha256-yAhI08dyYCM9mghQLVKOXLUWuxHl3zAO80xVB8YfN/0="></script>
|
||||
<link rel="alternate" type="application/rss+xml" href="https://kfcfans.gitee.io/docs/startup/index.xml" title="OhMyScheduler" />
|
||||
<!--
|
||||
Made with Book Theme
|
||||
https://github.com/alex-shpak/hugo-book
|
||||
@ -31,7 +31,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
|
||||
<nav>
|
||||
<h2 class="book-brand">
|
||||
<a href="/ohmyscheduler"><span>OhMyScheduler</span>
|
||||
<a href="/"><span>OhMyScheduler</span>
|
||||
</a>
|
||||
</h2>
|
||||
|
||||
@ -83,7 +83,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/startup/1-server-startup/" class="">调度中心(Server)部署</a>
|
||||
<a href="/docs/startup/1-server-startup/" class="">调度中心(Server)部署</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -93,7 +93,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/startup/2-worker-startup/" class="">执行器(Worker)初始化</a>
|
||||
<a href="/docs/startup/2-worker-startup/" class="">执行器(Worker)初始化</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -103,7 +103,17 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/startup/3-processor-develop/" class="">处理器编写</a>
|
||||
<a href="/docs/startup/3-processor-develop/" class="">处理器开发</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/docs/startup/4-console-guide/" class="">任务管理与在线运维</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -116,10 +126,10 @@ https://github.com/alex-shpak/hugo-book
|
||||
|
||||
|
||||
|
||||
<li class="book-section-flat" >
|
||||
<li>
|
||||
|
||||
|
||||
<span>Shortcodes</span>
|
||||
<span>高级特性</span>
|
||||
|
||||
|
||||
|
||||
@ -134,7 +144,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/columns/" class="">Columns</a>
|
||||
<a href="/docs/super/container/" class="">容器</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -144,7 +154,13 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/details/" class="">Details</a>
|
||||
<a href="/docs/super/openapi/" class="">OpenAPI</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
</li>
|
||||
@ -154,51 +170,16 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/expand/" class="">Expand</a>
|
||||
<span>更新日志</span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/hints/" class="">Hints</a>
|
||||
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/katex/" class="">Katex</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/mermaid/" class="">Mermaid</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/tabs/" class="">Tabs</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<ul>
|
||||
|
||||
</ul>
|
||||
|
||||
@ -239,13 +220,13 @@ https://github.com/alex-shpak/hugo-book
|
||||
|
||||
<div class="flex align-center justify-between">
|
||||
<label for="menu-control">
|
||||
<img src="/ohmyscheduler/svg/menu.svg" class="book-icon" alt="Menu" />
|
||||
<img src="/svg/menu.svg" class="book-icon" alt="Menu" />
|
||||
</label>
|
||||
|
||||
<strong>快速开始</strong>
|
||||
|
||||
<label for="toc-control">
|
||||
<img src="/ohmyscheduler/svg/toc.svg" class="book-icon" alt="Table of Contents" />
|
||||
<img src="/svg/toc.svg" class="book-icon" alt="Table of Contents" />
|
||||
</label>
|
||||
</div>
|
||||
|
||||
|
@ -2,20 +2,20 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>快速开始 on OhMyScheduler</title>
|
||||
<link>https://kfcfans.gitee.io/ohmyscheduler/docs/startup/</link>
|
||||
<link>https://kfcfans.gitee.io/docs/startup/</link>
|
||||
<description>Recent content in 快速开始 on OhMyScheduler</description>
|
||||
<generator>Hugo -- gohugo.io</generator>
|
||||
<language>en-us</language>
|
||||
|
||||
<atom:link href="https://kfcfans.gitee.io/ohmyscheduler/docs/startup/index.xml" rel="self" type="application/rss+xml" />
|
||||
<atom:link href="https://kfcfans.gitee.io/docs/startup/index.xml" rel="self" type="application/rss+xml" />
|
||||
|
||||
|
||||
<item>
|
||||
<title>调度中心(Server)部署</title>
|
||||
<link>https://kfcfans.gitee.io/ohmyscheduler/docs/startup/1-server-startup/</link>
|
||||
<link>https://kfcfans.gitee.io/docs/startup/1-server-startup/</link>
|
||||
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
|
||||
|
||||
<guid>https://kfcfans.gitee.io/ohmyscheduler/docs/startup/1-server-startup/</guid>
|
||||
<guid>https://kfcfans.gitee.io/docs/startup/1-server-startup/</guid>
|
||||
<description>环境要求 Open JDK 8+
|
||||
Apache Maven 3+
|
||||
任意 Spring Data Jpa 支持的关系型数据库(MySQL/Oracle/MS SQLServer&hellip;)
|
||||
@ -28,26 +28,45 @@
|
||||
|
||||
<item>
|
||||
<title>执行器(Worker)初始化</title>
|
||||
<link>https://kfcfans.gitee.io/ohmyscheduler/docs/startup/2-worker-startup/</link>
|
||||
<link>https://kfcfans.gitee.io/docs/startup/2-worker-startup/</link>
|
||||
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
|
||||
|
||||
<guid>https://kfcfans.gitee.io/ohmyscheduler/docs/startup/2-worker-startup/</guid>
|
||||
<guid>https://kfcfans.gitee.io/docs/startup/2-worker-startup/</guid>
|
||||
<description>基于宿主应用的执行器初始化 宿主应用即原有的业务应用,假如需要调度执行的任务与当前业务有较为紧密的联系,建议采取该方式。
|
||||
OhMyScheduler当前支持Shell、Python等脚本处理器和Java处理器。脚本处理器只需要开发者完成脚本的编写(xxx.sh / xxx.py),在控制台填入脚本内容即可,本章不再赘述。本章将重点阐述Java处理器开发方法与使用技巧。
|
||||
Java处理器可根据代码所处位置划分为内置Java处理器和容器Java处理器,前者直接集成在宿主应用(也就是接入本系统的业务应用)中,一般用来处理业务需求;后者可以在一个独立的轻量级的Java工程中开发,通过容器技术(详见容器章节)被worker集群热加载,提供Java的“脚本能力”,一般用于处理灵活多变的需求。 Java处理器可根据对象创建者划分为SpringBean处理器和普通Java对象处理器,前者由Spring IOC容器完成处理器的创建和初始化,后者则有OhMyScheduler维护其状态。如果宿主应用支持Spring,强烈建议使用SpringBean处理器,开发者仅需要将Processor注册进Spring IOC容器(一个@Component注解或一句bean配置)。 Java处理器可根据功能划分为单机处理器、广播处理器、Map处理器和MapReduce处理器。 单机处理器对应了单机任务,即某个任务的某次运行只会有某一台机器的某一个线程参与运算。 广播处理器对应了广播任务,即某个任务的某次运行会调动集群内所有机器参与运算。 Map处理器对应了Map任务,即某个任务在运行过程中,允许产生子任务并分发到其他机器进行运算。 MapReduce处理器对应了MapReduce任务,在Map任务的基础上,增加了所有任务结束后的汇总统计。 首先,添加相关的jar包依赖,最新依赖版本请参考maven中央仓库:推荐地址&amp;备用地址
|
||||
首先,添加相关的jar包依赖,最新依赖版本请参考maven中央仓库:推荐地址&amp;备用地址
|
||||
&lt;dependency&gt; &lt;groupId&gt;com.github.kfcfans&lt;/groupId&gt; &lt;artifactId&gt;oh-my-scheduler-worker&lt;/artifactId&gt; &lt;version&gt;1.2.0&lt;/version&gt; &lt;/dependency&gt; 其次,填写执行器客户端配置文件OhMyConfig,各参数说明如下表所示:
|
||||
属性名称 含义 默认值 appName 宿主应用名称,需要提前在控制台完成注册 无,必填项,否则启动报错 port Worker工作端口 27777 serverAddress 调度中心(oh-my-scheduler-server)地址列表 无,必填项,否则启动报错 storeStrategy 本地存储策略,枚举值磁盘/内存,大型MapReduce等会产生大量Task的任务推荐使用磁盘降低内存压力,否则建议使用内存加速计算 StoreStrategy.DISK(磁盘) maxResultLength 每个Task返回结果的默认长度,超长将被截断。过长可能导致网络拥塞 8096 enableTestMode 是否启用测试模式,启用后无需Server也能顺利启动OhMyScheduler-Worker,用于处理器本地的单元测试 false 最后,初始化客户端,完成执行器的启动,代码示例如下:</description>
|
||||
属性名称 含义 默认值 appName 宿主应用名称,需要提前在控制台完成注册 无,必填项,否则启动报错 port Worker工作端口 27777 serverAddress 调度中心(oh-my-scheduler-server)地址列表 无,必填项,否则启动报错 storeStrategy 本地存储策略,枚举值磁盘/内存,大型MapReduce等会产生大量Task的任务推荐使用磁盘降低内存压力,否则建议使用内存加速计算 StoreStrategy.DISK(磁盘) maxResultLength 每个Task返回结果的默认长度,超长将被截断。过长可能导致网络拥塞 8096 enableTestMode 是否启用测试模式,启用后无需Server也能顺利启动OhMyScheduler-Worker,用于处理器本地的单元测试 false 最后,初始化客户端,完成执行器的启动,代码示例如下:
|
||||
@Configuration public class OhMySchedulerConfig { @Bean public OhMyWorker initOMS() throws Exception { // 服务器HTTP地址(端口号为 server.port,而不是 ActorSystem port) List&lt;String&gt; serverAddress = Lists.</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>处理器编写</title>
|
||||
<link>https://kfcfans.gitee.io/ohmyscheduler/docs/startup/3-processor-develop/</link>
|
||||
<title>处理器开发</title>
|
||||
<link>https://kfcfans.gitee.io/docs/startup/3-processor-develop/</link>
|
||||
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
|
||||
|
||||
<guid>https://kfcfans.gitee.io/ohmyscheduler/docs/startup/3-processor-develop/</guid>
|
||||
<guid>https://kfcfans.gitee.io/docs/startup/3-processor-develop/</guid>
|
||||
<description>处理器概述 OhMyScheduler当前支持Shell、Python等脚本处理器和Java处理器。脚本处理器只需要开发者完成脚本的编写(xxx.sh / xxx.py),在控制台填入脚本内容即可,本章不再赘述。本章将重点阐述Java处理器开发方法与使用技巧。
|
||||
Java处理器可根据代码所处位置划分为内置Java处理器和容器Java处理器,前者直接集成在宿主应用(也就是接入本系统的业务应用)中,一般用来处理业务需求;后者可以在一个独立的轻量级的Java工程中开发,通过容器技术(详见容器章节)被worker集群热加载,提供Java的“脚本能力”,一般用于处理灵活多变的需求。 Java处理器可根据对象创建者划分为SpringBean处理器和普通Java对象处理器,前者由Spring IOC容器完成处理器的创建和初始化,后者则有OhMyScheduler维护其状态。如果宿主应用支持Spring,强烈建议使用SpringBean处理器,开发者仅需要将Processor注册进Spring IOC容器(一个@Component注解或一句bean配置)。 Java处理器可根据功能划分为单机处理器、广播处理器、Map处理器和MapReduce处理器。 单机处理器对应了单机任务,即某个任务的某次运行只会有某一台机器的某一个线程参与运算。 广播处理器对应了广播任务,即某个任务的某次运行会调动集群内所有机器参与运算。 Map处理器对应了Map任务,即某个任务在运行过程中,允许产生子任务并分发到其他机器进行运算。 MapReduce处理器对应了MapReduce任务,在Map任务的基础上,增加了所有任务结束后的汇总统计。 初始化宿主应用 首先,添加相关的jar包依赖,最新依赖版本请参考maven中央仓库:推荐地址&amp;备用地址
|
||||
&lt;dependency&gt; &lt;groupId&gt;com.github.kfcfans&lt;/groupId&gt; &lt;artifactId&gt;oh-my-scheduler-worker&lt;/artifactId&gt; &lt;version&gt;1.2.0&lt;/version&gt; &lt;/dependency&gt; </description>
|
||||
Java处理器可根据代码所处位置划分为内置Java处理器和容器Java处理器,前者直接集成在宿主应用(也就是接入本系统的业务应用)中,一般用来处理业务需求;后者可以在一个独立的轻量级的Java工程中开发,通过容器技术(详见容器章节)被worker集群热加载,提供Java的“脚本能力”,一般用于处理灵活多变的需求。 Java处理器可根据对象创建者划分为SpringBean处理器和普通Java对象处理器,前者由Spring IOC容器完成处理器的创建和初始化,后者则有OhMyScheduler维护其状态。如果宿主应用支持Spring,强烈建议使用SpringBean处理器,开发者仅需要将Processor注册进Spring IOC容器(一个@Component注解或一句bean配置)。 Java处理器可根据功能划分为单机处理器、广播处理器、Map处理器和MapReduce处理器。 单机处理器(BasicProcessor)对应了单机任务,即某个任务的某次运行只会有某一台机器的某一个线程参与运算。 广播处理器(BroadcastProcessor)对应了广播任务,即某个任务的某次运行会调动集群内所有机器参与运算。 Map处理器(MapProcessor)对应了Map任务,即某个任务在运行过程中,允许产生子任务并分发到其他机器进行运算。 MapReduce处理器(MapReduceProcessor)对应了MapReduce任务,在Map任务的基础上,增加了所有任务结束后的汇总统计。 核心方法:process 任意Java处理器都需要实现处理的核心方法,其接口签名如下:
|
||||
ProcessResult process(TaskContext context) throws Exception; 方法入参TaskContext,包含了本次处理的上下文信息,具体属性如下:
|
||||
属性名称 意义/用法 jobId 任务ID,开发者一般无需关心此参数 instanceId 任务实例ID,全局唯一,开发者一般无需关心此参数 subInstanceId 子任务实例ID,秒级任务使用,开发者一般无需关心此参数 taskId 采用链式命名法的ID,在某个任务实例内唯一,开发者一般无需关心此参数 taskName task名称,Map/MapReduce任务的子任务的值为开发者指定,否则为系统默认值,开发者一般无需关心此参数 jobParams 任务参数,其值等同于控制台录入的任务参数,常用! instanceParams 任务实例参数,其值等同于使用OpenAPI运行任务实例时传递的参数,常用! maxRetryTimes Task的最大重试次数 currentRetryTimes Task的当前重试次数,和maxRetryTimes联合起来可以判断当前是否为该Task的最后一次运行机会 subTask 子Task,Map/MapReduce处理器专属,开发者调用map方法时传递的子任务列表中的某一个 omsLogger 在线日志,用法同Slf4J,记录的日志可以直接通过控制台查看,非常便捷和强大!不过使用过程中需要注意频率,可能对Server造成巨大的压力 方法的返回值为ProcessResult,代表了本次Task执行的结果,包含success和msg两个属性,分别用于传递Task是否执行成功和Task需要返回的信息。</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>任务管理与在线运维</title>
|
||||
<link>https://kfcfans.gitee.io/docs/startup/4-console-guide/</link>
|
||||
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
|
||||
|
||||
<guid>https://kfcfans.gitee.io/docs/startup/4-console-guide/</guid>
|
||||
<description>前端控制台允许开发者可视化地进行任务增、删、改、查等管理操作,同时也能直观地看到任务的运行数据,包括运行状态、详情和在线日志等。以下为对控制台的详细介绍: 主页 展示了系统整体的概览和集群Worker列表。
|
||||
任务创建 创建需要被调度执行的任务,入口为主页 -&gt; 任务管理 -&gt; 新建任务。
|
||||
任务名称:名称,便于记忆与搜索,无特殊用途,请尽量简短(占用数据库字段空间)
|
||||
任务描述:描述,无特殊作用,请尽量简短(占用数据库字段空间)
|
||||
任务参数:任务处理时能够获取到的参数(即各个Processor的process方法入参TaskContext对象的jobParams字段)(进行一次处理器开发就能理解了)
|
||||
定时信息:由下拉框和输入框组成
|
||||
API -&gt; 不需要填写任何参数(填了也不起作用) CRON -&gt; 填写 CRON 表达式(可以找个在线生成网站生成) 固定频率 -&gt; 填写整数,单位毫秒 固定延迟 -&gt; 填写整数,单位毫秒 执行配置:由执行类型(单机、广播和MapReduce)、处理器类型和处理器参数组成,后两项相互关联。
|
||||
内置Java处理器 -&gt; 填写该处理器的全限定类名(eg, com.github.kfcfans.oms.processors.demo.MapReduceProcessorDemo) Java容器 -&gt; 填写容器ID#处理器全限定类名(eg,1#com.github.kfcfans.oms.container.DemoProcessor) SHELL -&gt; 填写需要处理的脚本(直接复制文件内容)或脚本下载连接(http://xxx) PYTHON -&gt; 填写完整的python脚本或下载连接(http://xxx) 运行配置
|
||||
最大实例数:该任务同时执行的数量(任务和实例就像是类和对象的关系,任务被调度执行后被称为实例) 单机线程并发数:该实例执行过程中每个Worker使用的线程数量(MapReduce任务生效,其余无论填什么,都只会使用1个线程或3个线程&hellip;) 运行时间限制:限定任务的最大运行时间,超时则视为失败,单位毫秒,0代表不限制超时时间。 重试配置:
|
||||
任务重试次数:实例级别,失败了整个任务实例重试,会更换TaskTracker(本次任务实例的Master节点),代价较大,大型Map/MapReduce慎用。 子任务重试次数:Task级别,每个子Task失败后单独重试,会更换ProcessorTracker(本次任务实际执行的Worker节点),代价较小,推荐使用。 注:对于单机任务来说,假如任务重试次数和子任务重试次数都配置了1且都执行失败,实际执行次数会变成4次!推荐任务实例重试配置为0,子任务重试次数根据实际情况配置。 机器配置:用来标明允许执行任务的机器状态,避开那些摇摇欲坠的机器,0代表无任何限制。</description>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
|
@ -11,14 +11,14 @@
|
||||
<meta name="theme-color" content="#FFFFFF"><meta property="og:title" content="介绍" />
|
||||
<meta property="og:description" content="" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="https://kfcfans.gitee.io/ohmyscheduler/" />
|
||||
<meta property="og:url" content="https://kfcfans.gitee.io/" />
|
||||
|
||||
<title>介绍 | OhMyScheduler</title>
|
||||
<link rel="manifest" href="/ohmyscheduler/manifest.json">
|
||||
<link rel="icon" href="/ohmyscheduler/favicon.png" type="image/x-icon">
|
||||
<link rel="stylesheet" href="/ohmyscheduler/book.min.e161f1fe2b283b6a43c29a52fde96e2387fade573e78efa6701d44c8499da76b.css" integrity="sha256-4WHx/isoO2pDwppS/eluI4f63lc+eO+mcB1EyEmdp2s=">
|
||||
<script defer src="/ohmyscheduler/en.search.min.1272dfb3df2a3f60e11485e0a1158d434da32177db3be3e28aae8e28aa7e9a15.js" integrity="sha256-EnLfs98qP2DhFIXgoRWNQ02jIXfbO+Piiq6OKKp+mhU="></script>
|
||||
<link rel="alternate" type="application/rss+xml" href="https://kfcfans.gitee.io/ohmyscheduler/index.xml" title="OhMyScheduler" />
|
||||
<link rel="manifest" href="/manifest.json">
|
||||
<link rel="icon" href="/favicon.png" type="image/x-icon">
|
||||
<link rel="stylesheet" href="/book.min.e161f1fe2b283b6a43c29a52fde96e2387fade573e78efa6701d44c8499da76b.css" integrity="sha256-4WHx/isoO2pDwppS/eluI4f63lc+eO+mcB1EyEmdp2s=">
|
||||
<script defer src="/en.search.min.c80848d3c77260233d9a08502d528e5cb516bb11e5df300ef34c5507c61f37fd.js" integrity="sha256-yAhI08dyYCM9mghQLVKOXLUWuxHl3zAO80xVB8YfN/0="></script>
|
||||
<link rel="alternate" type="application/rss+xml" href="https://kfcfans.gitee.io/index.xml" title="OhMyScheduler" />
|
||||
<!--
|
||||
Made with Book Theme
|
||||
https://github.com/alex-shpak/hugo-book
|
||||
@ -34,7 +34,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
|
||||
<nav>
|
||||
<h2 class="book-brand">
|
||||
<a href="/ohmyscheduler"><span>OhMyScheduler</span>
|
||||
<a href="/"><span>OhMyScheduler</span>
|
||||
</a>
|
||||
</h2>
|
||||
|
||||
@ -86,7 +86,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/startup/1-server-startup/" class="">调度中心(Server)部署</a>
|
||||
<a href="/docs/startup/1-server-startup/" class="">调度中心(Server)部署</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -96,7 +96,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/startup/2-worker-startup/" class="">执行器(Worker)初始化</a>
|
||||
<a href="/docs/startup/2-worker-startup/" class="">执行器(Worker)初始化</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -106,7 +106,17 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/startup/3-processor-develop/" class="">处理器编写</a>
|
||||
<a href="/docs/startup/3-processor-develop/" class="">处理器开发</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/docs/startup/4-console-guide/" class="">任务管理与在线运维</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -119,10 +129,10 @@ https://github.com/alex-shpak/hugo-book
|
||||
|
||||
|
||||
|
||||
<li class="book-section-flat" >
|
||||
<li>
|
||||
|
||||
|
||||
<span>Shortcodes</span>
|
||||
<span>高级特性</span>
|
||||
|
||||
|
||||
|
||||
@ -137,7 +147,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/columns/" class="">Columns</a>
|
||||
<a href="/docs/super/container/" class="">容器</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -147,7 +157,13 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/details/" class="">Details</a>
|
||||
<a href="/docs/super/openapi/" class="">OpenAPI</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
</li>
|
||||
@ -157,51 +173,16 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/expand/" class="">Expand</a>
|
||||
<span>更新日志</span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/hints/" class="">Hints</a>
|
||||
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/katex/" class="">Katex</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/mermaid/" class="">Mermaid</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/tabs/" class="">Tabs</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<ul>
|
||||
|
||||
</ul>
|
||||
|
||||
@ -242,13 +223,13 @@ https://github.com/alex-shpak/hugo-book
|
||||
|
||||
<div class="flex align-center justify-between">
|
||||
<label for="menu-control">
|
||||
<img src="/ohmyscheduler/svg/menu.svg" class="book-icon" alt="Menu" />
|
||||
<img src="/svg/menu.svg" class="book-icon" alt="Menu" />
|
||||
</label>
|
||||
|
||||
<strong>介绍</strong>
|
||||
|
||||
<label for="toc-control">
|
||||
<img src="/ohmyscheduler/svg/toc.svg" class="book-icon" alt="Table of Contents" />
|
||||
<img src="/svg/toc.svg" class="book-icon" alt="Table of Contents" />
|
||||
</label>
|
||||
</div>
|
||||
|
||||
@ -259,7 +240,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
|
||||
|
||||
|
||||
<article class="markdown"><p><img src="/oms-logo.png" alt="logo" /></p>
|
||||
<article class="markdown"><p><img src="oms-logo.png" alt="logo" /></p>
|
||||
<h2 id="项目地址">项目地址</h2>
|
||||
<p><a href="https://github.com/KFCFans/OhMyScheduler">GitHub</a> | <a href="https://gitee.com/KFCFans/OhMyScheduler">Gitee</a></p>
|
||||
<h2 id="产品介绍">产品介绍</h2>
|
||||
|
@ -2,20 +2,32 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>介绍 on OhMyScheduler</title>
|
||||
<link>https://kfcfans.gitee.io/ohmyscheduler/</link>
|
||||
<link>https://kfcfans.gitee.io/</link>
|
||||
<description>Recent content in 介绍 on OhMyScheduler</description>
|
||||
<generator>Hugo -- gohugo.io</generator>
|
||||
<language>en-us</language>
|
||||
|
||||
<atom:link href="https://kfcfans.gitee.io/ohmyscheduler/index.xml" rel="self" type="application/rss+xml" />
|
||||
<atom:link href="https://kfcfans.gitee.io/index.xml" rel="self" type="application/rss+xml" />
|
||||
|
||||
|
||||
<item>
|
||||
<title>调度中心(Server)部署</title>
|
||||
<link>https://kfcfans.gitee.io/ohmyscheduler/docs/startup/1-server-startup/</link>
|
||||
<title>容器</title>
|
||||
<link>https://kfcfans.gitee.io/docs/super/container/</link>
|
||||
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
|
||||
|
||||
<guid>https://kfcfans.gitee.io/ohmyscheduler/docs/startup/1-server-startup/</guid>
|
||||
<guid>https://kfcfans.gitee.io/docs/super/container/</guid>
|
||||
<description>什么是容器? 介绍 OhMyScheduler的容器技术允许开发者开发独立于Worker项目之外Java处理器,简单来说,就是以Maven工程项目的维度去组织一堆Java文件(开发者开发的众多脚本处理器),进而兼具开发效率和可维护性。
|
||||
用途举例 比如,突然出现了某个数据库数据清理任务,与主业务无关,写进原本的项目工程中不太优雅,这时候就可以单独创建一个用于数据操作的容器,在里面完成处理器的开发,通过OhMyScheduler的容器部署技术在Worker集群上被加载执行。 比如,常见的日志清理啊,机器状态上报啊,对于广大Java程序员来说,也许并不是很会写shell脚本,此时也可以借用agent+容器技术,利用Java完成各项原本需要通过脚本进行的操作。 (感觉例子举的都不是很好&hellip;这个东西嘛,只可意会不可言传,大家努力理解一下吧~超好用哦~)
|
||||
生成容器模版 为了方便开发者使用,最新版本的前端页面已经支持容器工程模版的自动生成,开发者仅需要填入相关信息即可下载容器模版开始开发。 Group:对应Maven的&lt;groupId&gt;标签,一般填入倒写的公司域名。 Artifact:对于Maven的&lt;artifactId&gt;标签,填入代表该容器的唯一标示。 Name:对应Maven的&lt;name&gt;标签,填入该容器名称。 Package Name:包名,代表了的容器工程内部所使用的包名,警告:包名一旦生成后,请勿更改!否则会导致运行时容器加载错误(当然,如有必须修改包名的需求,可以尝试替换/resource下以oms-worker-container开头的所有文件相关的值)。 Java Version:容器工程的Java版本,请务必与容器目标部署Worker平台的Java版本保持一致。 开发容器工程 完成容器模版创建后,下载,解压,会得到如下结构的Java工程:
|
||||
oms-template-origin // 工程名称,可以自由更改 ├── pom.xml └── src ├── main │ ├── java │ │ └── cn │ │ └── edu │ │ └── zju │ │ └── tjq │ │ └── container │ │ └── samples // 所有处理器代码必须位于该目录下,其余类随意 │ └── resources // 严禁随意更改以下两个配置文件(允许添加,不允许更改现有内容) │ ├── oms-worker-container-spring-context.xml │ └── oms-worker-container.</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>调度中心(Server)部署</title>
|
||||
<link>https://kfcfans.gitee.io/docs/startup/1-server-startup/</link>
|
||||
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
|
||||
|
||||
<guid>https://kfcfans.gitee.io/docs/startup/1-server-startup/</guid>
|
||||
<description>环境要求 Open JDK 8+
|
||||
Apache Maven 3+
|
||||
任意 Spring Data Jpa 支持的关系型数据库(MySQL/Oracle/MS SQLServer&hellip;)
|
||||
@ -26,101 +38,60 @@
|
||||
配置项 含义 可选 server.port SpringBoot配置,HTTP端口号,默认7700 否 oms.</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>OpenAPI</title>
|
||||
<link>https://kfcfans.gitee.io/docs/super/openapi/</link>
|
||||
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
|
||||
|
||||
<guid>https://kfcfans.gitee.io/docs/super/openapi/</guid>
|
||||
<description>OpenAPI允许开发者通过接口来完成手工的操作,让系统整体变得更加灵活。开发者可以基于API便捷地扩展OhMyScheduler原有的功能。 依赖 最新依赖版本请参考Maven中央仓库:推荐地址&amp;备用地址。
|
||||
&lt;dependency&gt; &lt;groupId&gt;com.github.kfcfans&lt;/groupId&gt; &lt;artifactId&gt;oh-my-scheduler-client&lt;/artifactId&gt; &lt;version&gt;1.2.0&lt;/version&gt; &lt;/dependency&gt; 简单示例 // 初始化 client,需要server地址和应用名称作为参数 OhMyClient ohMyClient = new OhMyClient(&#34;127.0.0.1:7700&#34;, &#34;oms-test&#34;); // 调用相关的API ohMyClient.stopInstance(1586855173043L) API列表 创建/修改任务 接口签名:ResultDTO&lt;Long&gt; saveJob(ClientJobInfo newJobInfo)
|
||||
入参:任务信息(详细说明见下表,也可以参考前端任务创建各参数的正确填法)
|
||||
返回值:ResultDTO,根据success判断操作是否成功。若操作成功,data字段返回任务ID
|
||||
属性 说明 jobId 任务ID,可选,null代表创建任务,否则填写需要修改的任务ID jobName 任务名称 jobDescription 任务描述 jobParams 任务参数,Processor#process方法入参TaskContext对象的jobParams字段 timeExpressionType 时间表达式类型,枚举值 timeExpression 时间表达式,填写类型由timeExpressionType决定,比如CRON需要填写CRON表达式 executeType 执行类型,枚举值 processorType 处理器类型,枚举值 processorInfo 处理器参数,填写类型由processorType决定,如Java处理器需要填写全限定类名,如:com.</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>执行器(Worker)初始化</title>
|
||||
<link>https://kfcfans.gitee.io/ohmyscheduler/docs/startup/2-worker-startup/</link>
|
||||
<link>https://kfcfans.gitee.io/docs/startup/2-worker-startup/</link>
|
||||
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
|
||||
|
||||
<guid>https://kfcfans.gitee.io/ohmyscheduler/docs/startup/2-worker-startup/</guid>
|
||||
<guid>https://kfcfans.gitee.io/docs/startup/2-worker-startup/</guid>
|
||||
<description>基于宿主应用的执行器初始化 宿主应用即原有的业务应用,假如需要调度执行的任务与当前业务有较为紧密的联系,建议采取该方式。
|
||||
OhMyScheduler当前支持Shell、Python等脚本处理器和Java处理器。脚本处理器只需要开发者完成脚本的编写(xxx.sh / xxx.py),在控制台填入脚本内容即可,本章不再赘述。本章将重点阐述Java处理器开发方法与使用技巧。
|
||||
Java处理器可根据代码所处位置划分为内置Java处理器和容器Java处理器,前者直接集成在宿主应用(也就是接入本系统的业务应用)中,一般用来处理业务需求;后者可以在一个独立的轻量级的Java工程中开发,通过容器技术(详见容器章节)被worker集群热加载,提供Java的“脚本能力”,一般用于处理灵活多变的需求。 Java处理器可根据对象创建者划分为SpringBean处理器和普通Java对象处理器,前者由Spring IOC容器完成处理器的创建和初始化,后者则有OhMyScheduler维护其状态。如果宿主应用支持Spring,强烈建议使用SpringBean处理器,开发者仅需要将Processor注册进Spring IOC容器(一个@Component注解或一句bean配置)。 Java处理器可根据功能划分为单机处理器、广播处理器、Map处理器和MapReduce处理器。 单机处理器对应了单机任务,即某个任务的某次运行只会有某一台机器的某一个线程参与运算。 广播处理器对应了广播任务,即某个任务的某次运行会调动集群内所有机器参与运算。 Map处理器对应了Map任务,即某个任务在运行过程中,允许产生子任务并分发到其他机器进行运算。 MapReduce处理器对应了MapReduce任务,在Map任务的基础上,增加了所有任务结束后的汇总统计。 首先,添加相关的jar包依赖,最新依赖版本请参考maven中央仓库:推荐地址&amp;备用地址
|
||||
首先,添加相关的jar包依赖,最新依赖版本请参考maven中央仓库:推荐地址&amp;备用地址
|
||||
&lt;dependency&gt; &lt;groupId&gt;com.github.kfcfans&lt;/groupId&gt; &lt;artifactId&gt;oh-my-scheduler-worker&lt;/artifactId&gt; &lt;version&gt;1.2.0&lt;/version&gt; &lt;/dependency&gt; 其次,填写执行器客户端配置文件OhMyConfig,各参数说明如下表所示:
|
||||
属性名称 含义 默认值 appName 宿主应用名称,需要提前在控制台完成注册 无,必填项,否则启动报错 port Worker工作端口 27777 serverAddress 调度中心(oh-my-scheduler-server)地址列表 无,必填项,否则启动报错 storeStrategy 本地存储策略,枚举值磁盘/内存,大型MapReduce等会产生大量Task的任务推荐使用磁盘降低内存压力,否则建议使用内存加速计算 StoreStrategy.DISK(磁盘) maxResultLength 每个Task返回结果的默认长度,超长将被截断。过长可能导致网络拥塞 8096 enableTestMode 是否启用测试模式,启用后无需Server也能顺利启动OhMyScheduler-Worker,用于处理器本地的单元测试 false 最后,初始化客户端,完成执行器的启动,代码示例如下:</description>
|
||||
属性名称 含义 默认值 appName 宿主应用名称,需要提前在控制台完成注册 无,必填项,否则启动报错 port Worker工作端口 27777 serverAddress 调度中心(oh-my-scheduler-server)地址列表 无,必填项,否则启动报错 storeStrategy 本地存储策略,枚举值磁盘/内存,大型MapReduce等会产生大量Task的任务推荐使用磁盘降低内存压力,否则建议使用内存加速计算 StoreStrategy.DISK(磁盘) maxResultLength 每个Task返回结果的默认长度,超长将被截断。过长可能导致网络拥塞 8096 enableTestMode 是否启用测试模式,启用后无需Server也能顺利启动OhMyScheduler-Worker,用于处理器本地的单元测试 false 最后,初始化客户端,完成执行器的启动,代码示例如下:
|
||||
@Configuration public class OhMySchedulerConfig { @Bean public OhMyWorker initOMS() throws Exception { // 服务器HTTP地址(端口号为 server.port,而不是 ActorSystem port) List&lt;String&gt; serverAddress = Lists.</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>处理器编写</title>
|
||||
<link>https://kfcfans.gitee.io/ohmyscheduler/docs/startup/3-processor-develop/</link>
|
||||
<title>处理器开发</title>
|
||||
<link>https://kfcfans.gitee.io/docs/startup/3-processor-develop/</link>
|
||||
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
|
||||
|
||||
<guid>https://kfcfans.gitee.io/ohmyscheduler/docs/startup/3-processor-develop/</guid>
|
||||
<guid>https://kfcfans.gitee.io/docs/startup/3-processor-develop/</guid>
|
||||
<description>处理器概述 OhMyScheduler当前支持Shell、Python等脚本处理器和Java处理器。脚本处理器只需要开发者完成脚本的编写(xxx.sh / xxx.py),在控制台填入脚本内容即可,本章不再赘述。本章将重点阐述Java处理器开发方法与使用技巧。
|
||||
Java处理器可根据代码所处位置划分为内置Java处理器和容器Java处理器,前者直接集成在宿主应用(也就是接入本系统的业务应用)中,一般用来处理业务需求;后者可以在一个独立的轻量级的Java工程中开发,通过容器技术(详见容器章节)被worker集群热加载,提供Java的“脚本能力”,一般用于处理灵活多变的需求。 Java处理器可根据对象创建者划分为SpringBean处理器和普通Java对象处理器,前者由Spring IOC容器完成处理器的创建和初始化,后者则有OhMyScheduler维护其状态。如果宿主应用支持Spring,强烈建议使用SpringBean处理器,开发者仅需要将Processor注册进Spring IOC容器(一个@Component注解或一句bean配置)。 Java处理器可根据功能划分为单机处理器、广播处理器、Map处理器和MapReduce处理器。 单机处理器对应了单机任务,即某个任务的某次运行只会有某一台机器的某一个线程参与运算。 广播处理器对应了广播任务,即某个任务的某次运行会调动集群内所有机器参与运算。 Map处理器对应了Map任务,即某个任务在运行过程中,允许产生子任务并分发到其他机器进行运算。 MapReduce处理器对应了MapReduce任务,在Map任务的基础上,增加了所有任务结束后的汇总统计。 初始化宿主应用 首先,添加相关的jar包依赖,最新依赖版本请参考maven中央仓库:推荐地址&amp;备用地址
|
||||
&lt;dependency&gt; &lt;groupId&gt;com.github.kfcfans&lt;/groupId&gt; &lt;artifactId&gt;oh-my-scheduler-worker&lt;/artifactId&gt; &lt;version&gt;1.2.0&lt;/version&gt; &lt;/dependency&gt; </description>
|
||||
Java处理器可根据代码所处位置划分为内置Java处理器和容器Java处理器,前者直接集成在宿主应用(也就是接入本系统的业务应用)中,一般用来处理业务需求;后者可以在一个独立的轻量级的Java工程中开发,通过容器技术(详见容器章节)被worker集群热加载,提供Java的“脚本能力”,一般用于处理灵活多变的需求。 Java处理器可根据对象创建者划分为SpringBean处理器和普通Java对象处理器,前者由Spring IOC容器完成处理器的创建和初始化,后者则有OhMyScheduler维护其状态。如果宿主应用支持Spring,强烈建议使用SpringBean处理器,开发者仅需要将Processor注册进Spring IOC容器(一个@Component注解或一句bean配置)。 Java处理器可根据功能划分为单机处理器、广播处理器、Map处理器和MapReduce处理器。 单机处理器(BasicProcessor)对应了单机任务,即某个任务的某次运行只会有某一台机器的某一个线程参与运算。 广播处理器(BroadcastProcessor)对应了广播任务,即某个任务的某次运行会调动集群内所有机器参与运算。 Map处理器(MapProcessor)对应了Map任务,即某个任务在运行过程中,允许产生子任务并分发到其他机器进行运算。 MapReduce处理器(MapReduceProcessor)对应了MapReduce任务,在Map任务的基础上,增加了所有任务结束后的汇总统计。 核心方法:process 任意Java处理器都需要实现处理的核心方法,其接口签名如下:
|
||||
ProcessResult process(TaskContext context) throws Exception; 方法入参TaskContext,包含了本次处理的上下文信息,具体属性如下:
|
||||
属性名称 意义/用法 jobId 任务ID,开发者一般无需关心此参数 instanceId 任务实例ID,全局唯一,开发者一般无需关心此参数 subInstanceId 子任务实例ID,秒级任务使用,开发者一般无需关心此参数 taskId 采用链式命名法的ID,在某个任务实例内唯一,开发者一般无需关心此参数 taskName task名称,Map/MapReduce任务的子任务的值为开发者指定,否则为系统默认值,开发者一般无需关心此参数 jobParams 任务参数,其值等同于控制台录入的任务参数,常用! instanceParams 任务实例参数,其值等同于使用OpenAPI运行任务实例时传递的参数,常用! maxRetryTimes Task的最大重试次数 currentRetryTimes Task的当前重试次数,和maxRetryTimes联合起来可以判断当前是否为该Task的最后一次运行机会 subTask 子Task,Map/MapReduce处理器专属,开发者调用map方法时传递的子任务列表中的某一个 omsLogger 在线日志,用法同Slf4J,记录的日志可以直接通过控制台查看,非常便捷和强大!不过使用过程中需要注意频率,可能对Server造成巨大的压力 方法的返回值为ProcessResult,代表了本次Task执行的结果,包含success和msg两个属性,分别用于传递Task是否执行成功和Task需要返回的信息。</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title></title>
|
||||
<link>https://kfcfans.gitee.io/ohmyscheduler/docs/shortcodes/columns/</link>
|
||||
<title>任务管理与在线运维</title>
|
||||
<link>https://kfcfans.gitee.io/docs/startup/4-console-guide/</link>
|
||||
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
|
||||
|
||||
<guid>https://kfcfans.gitee.io/ohmyscheduler/docs/shortcodes/columns/</guid>
|
||||
<description>Columns Columns help organize shorter pieces of content horizontally for readability.
|
||||
{{&lt; columns &gt;}} &lt;!-- begin columns block --&gt; # Left Content Lorem markdownum insigne... &lt;---&gt; &lt;!-- magic sparator, between columns --&gt; # Mid Content Lorem markdownum insigne... &lt;---&gt; &lt;!-- magic sparator, between columns --&gt; # Right Content Lorem markdownum insigne... {{&lt; /columns &gt;}} Example Left Content Lorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat stringit, frustra Saturnius uteroque inter!</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title></title>
|
||||
<link>https://kfcfans.gitee.io/ohmyscheduler/docs/shortcodes/details/</link>
|
||||
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
|
||||
|
||||
<guid>https://kfcfans.gitee.io/ohmyscheduler/docs/shortcodes/details/</guid>
|
||||
<description>Details Details shortcode is a helper for details html5 element. It is going to replace expand shortcode.
|
||||
Example {{&lt; details &#34;Title&#34; [open] &gt;}} ## Markdown content Lorem markdownum insigne... {{&lt; /details &gt;}} {{&lt; details title=&#34;Title&#34; open=true &gt;}} ## Markdown content Lorem markdownum insigne... {{&lt; /details &gt;}} Title Markdown content Lorem markdownum insigne&hellip; </description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title></title>
|
||||
<link>https://kfcfans.gitee.io/ohmyscheduler/docs/shortcodes/expand/</link>
|
||||
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
|
||||
|
||||
<guid>https://kfcfans.gitee.io/ohmyscheduler/docs/shortcodes/expand/</guid>
|
||||
<description>Expand Expand shortcode can help to decrease clutter on screen by hiding part of text. Expand content by clicking on it.
|
||||
Example Default {{&lt; expand &gt;}} ## Markdown content Lorem markdownum insigne... {{&lt; /expand &gt;}} Expand ↕ Markdown content Lorem markdownum insigne&hellip; With Custom Label {{&lt; expand &#34;Custom Label&#34; &#34;...&#34; &gt;}} ## Markdown content Lorem markdownum insigne... {{&lt; /expand &gt;}} Custom Label .</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title></title>
|
||||
<link>https://kfcfans.gitee.io/ohmyscheduler/docs/shortcodes/hints/</link>
|
||||
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
|
||||
|
||||
<guid>https://kfcfans.gitee.io/ohmyscheduler/docs/shortcodes/hints/</guid>
|
||||
<description>Hints Hint shortcode can be used as hint/alerts/notification block.
|
||||
There are 3 colors to choose: info, warning and danger.
|
||||
{{&lt; hint [info|warning|danger] &gt;}} **Markdown content** Lorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat stringit, frustra Saturnius uteroque inter! Oculis non ritibus Telethusa {{&lt; /hint &gt;}} Example Markdown content
|
||||
Lorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat stringit, frustra Saturnius uteroque inter! Oculis non ritibus Telethusa Markdown content</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title></title>
|
||||
<link>https://kfcfans.gitee.io/ohmyscheduler/docs/shortcodes/katex/</link>
|
||||
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
|
||||
|
||||
<guid>https://kfcfans.gitee.io/ohmyscheduler/docs/shortcodes/katex/</guid>
|
||||
<description>KaTeX KaTeX shortcode let you render math typesetting in markdown document. See KaTeX
|
||||
Example {{&lt; katex [display] [class=&#34;text-center&#34;] &gt;}} f(x) = \int_{-\infty}^\infty\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi {{&lt; /katex &gt;}} Display Mode Example Here is some inline example: \(\pi(x)\) , rendered in the same line. And below is display example, having display: block \[f(x) = \int_{-\infty}^\infty\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi\] Text continues here.</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title></title>
|
||||
<link>https://kfcfans.gitee.io/ohmyscheduler/docs/shortcodes/mermaid/</link>
|
||||
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
|
||||
|
||||
<guid>https://kfcfans.gitee.io/ohmyscheduler/docs/shortcodes/mermaid/</guid>
|
||||
<description>Mermaid Chart Mermaid is library for generating svg charts and diagrams from text.
|
||||
Example {{&lt; mermaid [class=&#34;text-center&#34;]&gt;}} sequenceDiagram Alice-&gt;&gt;Bob: Hello Bob, how are you? alt is sick Bob-&gt;&gt;Alice: Not so good :( else is well Bob-&gt;&gt;Alice: Feeling fresh like a daisy end opt Extra response Bob-&gt;&gt;Alice: Thanks for asking end {{&lt; /mermaid &gt;}} </description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title></title>
|
||||
<link>https://kfcfans.gitee.io/ohmyscheduler/docs/shortcodes/tabs/</link>
|
||||
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
|
||||
|
||||
<guid>https://kfcfans.gitee.io/ohmyscheduler/docs/shortcodes/tabs/</guid>
|
||||
<description>Tabs Tabs let you organize content by context, for example installation instructions for each supported platform.
|
||||
{{&lt; tabs &#34;uniqueid&#34; &gt;}} {{&lt; tab &#34;MacOS&#34; &gt;}} # MacOS Content {{&lt; /tab &gt;}} {{&lt; tab &#34;Linux&#34; &gt;}} # Linux Content {{&lt; /tab &gt;}} {{&lt; tab &#34;Windows&#34; &gt;}} # Windows Content {{&lt; /tab &gt;}} {{&lt; /tabs &gt;}} Example MacOS MacOS This is tab MacOS content.
|
||||
Lorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat stringit, frustra Saturnius uteroque inter!</description>
|
||||
<guid>https://kfcfans.gitee.io/docs/startup/4-console-guide/</guid>
|
||||
<description>前端控制台允许开发者可视化地进行任务增、删、改、查等管理操作,同时也能直观地看到任务的运行数据,包括运行状态、详情和在线日志等。以下为对控制台的详细介绍: 主页 展示了系统整体的概览和集群Worker列表。
|
||||
任务创建 创建需要被调度执行的任务,入口为主页 -&gt; 任务管理 -&gt; 新建任务。
|
||||
任务名称:名称,便于记忆与搜索,无特殊用途,请尽量简短(占用数据库字段空间)
|
||||
任务描述:描述,无特殊作用,请尽量简短(占用数据库字段空间)
|
||||
任务参数:任务处理时能够获取到的参数(即各个Processor的process方法入参TaskContext对象的jobParams字段)(进行一次处理器开发就能理解了)
|
||||
定时信息:由下拉框和输入框组成
|
||||
API -&gt; 不需要填写任何参数(填了也不起作用) CRON -&gt; 填写 CRON 表达式(可以找个在线生成网站生成) 固定频率 -&gt; 填写整数,单位毫秒 固定延迟 -&gt; 填写整数,单位毫秒 执行配置:由执行类型(单机、广播和MapReduce)、处理器类型和处理器参数组成,后两项相互关联。
|
||||
内置Java处理器 -&gt; 填写该处理器的全限定类名(eg, com.github.kfcfans.oms.processors.demo.MapReduceProcessorDemo) Java容器 -&gt; 填写容器ID#处理器全限定类名(eg,1#com.github.kfcfans.oms.container.DemoProcessor) SHELL -&gt; 填写需要处理的脚本(直接复制文件内容)或脚本下载连接(http://xxx) PYTHON -&gt; 填写完整的python脚本或下载连接(http://xxx) 运行配置
|
||||
最大实例数:该任务同时执行的数量(任务和实例就像是类和对象的关系,任务被调度执行后被称为实例) 单机线程并发数:该实例执行过程中每个Worker使用的线程数量(MapReduce任务生效,其余无论填什么,都只会使用1个线程或3个线程&hellip;) 运行时间限制:限定任务的最大运行时间,超时则视为失败,单位毫秒,0代表不限制超时时间。 重试配置:
|
||||
任务重试次数:实例级别,失败了整个任务实例重试,会更换TaskTracker(本次任务实例的Master节点),代价较大,大型Map/MapReduce慎用。 子任务重试次数:Task级别,每个子Task失败后单独重试,会更换ProcessorTracker(本次任务实际执行的Worker节点),代价较小,推荐使用。 注:对于单机任务来说,假如任务重试次数和子任务重试次数都配置了1且都执行失败,实际执行次数会变成4次!推荐任务实例重试配置为0,子任务重试次数根据实际情况配置。 机器配置:用来标明允许执行任务的机器状态,避开那些摇摇欲坠的机器,0代表无任何限制。</description>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
|
@ -1,14 +1,14 @@
|
||||
{
|
||||
"name": "OhMyScheduler",
|
||||
"short_name": "OhMyScheduler",
|
||||
"start_url": "/ohmyscheduler/",
|
||||
"scope": "/ohmyscheduler/",
|
||||
"start_url": "/",
|
||||
"scope": "/",
|
||||
"display": "standalone",
|
||||
"background_color": "#000000",
|
||||
"theme_color": "#000000",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/ohmyscheduler/favicon.svg",
|
||||
"src": "/favicon.svg",
|
||||
"sizes": "512x512"
|
||||
}
|
||||
]
|
||||
|
@ -3,67 +3,55 @@
|
||||
xmlns:xhtml="http://www.w3.org/1999/xhtml">
|
||||
|
||||
<url>
|
||||
<loc>https://kfcfans.gitee.io/ohmyscheduler/docs/startup/</loc>
|
||||
<loc>https://kfcfans.gitee.io/docs/super/container/</loc>
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://kfcfans.gitee.io/ohmyscheduler/docs/startup/1-server-startup/</loc>
|
||||
<loc>https://kfcfans.gitee.io/docs/startup/</loc>
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://kfcfans.gitee.io/ohmyscheduler/docs/startup/2-worker-startup/</loc>
|
||||
<loc>https://kfcfans.gitee.io/docs/startup/1-server-startup/</loc>
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://kfcfans.gitee.io/ohmyscheduler/docs/startup/3-processor-develop/</loc>
|
||||
<loc>https://kfcfans.gitee.io/docs/super/openapi/</loc>
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://kfcfans.gitee.io/ohmyscheduler/docs/shortcodes/</loc>
|
||||
<loc>https://kfcfans.gitee.io/docs/startup/2-worker-startup/</loc>
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://kfcfans.gitee.io/ohmyscheduler/docs/shortcodes/columns/</loc>
|
||||
<loc>https://kfcfans.gitee.io/docs/super/</loc>
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://kfcfans.gitee.io/ohmyscheduler/docs/shortcodes/details/</loc>
|
||||
<loc>https://kfcfans.gitee.io/docs/startup/3-processor-develop/</loc>
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://kfcfans.gitee.io/ohmyscheduler/docs/shortcodes/expand/</loc>
|
||||
<loc>https://kfcfans.gitee.io/docs/startup/4-console-guide/</loc>
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://kfcfans.gitee.io/ohmyscheduler/docs/shortcodes/hints/</loc>
|
||||
<loc>https://kfcfans.gitee.io/docs/version/</loc>
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://kfcfans.gitee.io/ohmyscheduler/docs/shortcodes/katex/</loc>
|
||||
<loc>https://kfcfans.gitee.io/categories/</loc>
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://kfcfans.gitee.io/ohmyscheduler/docs/shortcodes/mermaid/</loc>
|
||||
<loc>https://kfcfans.gitee.io/docs/</loc>
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://kfcfans.gitee.io/ohmyscheduler/docs/shortcodes/tabs/</loc>
|
||||
<loc>https://kfcfans.gitee.io/tags/</loc>
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://kfcfans.gitee.io/ohmyscheduler/categories/</loc>
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://kfcfans.gitee.io/ohmyscheduler/docs/</loc>
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://kfcfans.gitee.io/ohmyscheduler/tags/</loc>
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://kfcfans.gitee.io/ohmyscheduler/</loc>
|
||||
<loc>https://kfcfans.gitee.io/</loc>
|
||||
</url>
|
||||
|
||||
</urlset>
|
@ -8,14 +8,14 @@
|
||||
<meta name="theme-color" content="#FFFFFF"><meta property="og:title" content="Tags" />
|
||||
<meta property="og:description" content="" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="https://kfcfans.gitee.io/ohmyscheduler/tags/" />
|
||||
<meta property="og:url" content="https://kfcfans.gitee.io/tags/" />
|
||||
|
||||
<title>Tags | OhMyScheduler</title>
|
||||
<link rel="manifest" href="/ohmyscheduler/manifest.json">
|
||||
<link rel="icon" href="/ohmyscheduler/favicon.png" type="image/x-icon">
|
||||
<link rel="stylesheet" href="/ohmyscheduler/book.min.e161f1fe2b283b6a43c29a52fde96e2387fade573e78efa6701d44c8499da76b.css" integrity="sha256-4WHx/isoO2pDwppS/eluI4f63lc+eO+mcB1EyEmdp2s=">
|
||||
<script defer src="/ohmyscheduler/en.search.min.1272dfb3df2a3f60e11485e0a1158d434da32177db3be3e28aae8e28aa7e9a15.js" integrity="sha256-EnLfs98qP2DhFIXgoRWNQ02jIXfbO+Piiq6OKKp+mhU="></script>
|
||||
<link rel="alternate" type="application/rss+xml" href="https://kfcfans.gitee.io/ohmyscheduler/tags/index.xml" title="OhMyScheduler" />
|
||||
<link rel="manifest" href="/manifest.json">
|
||||
<link rel="icon" href="/favicon.png" type="image/x-icon">
|
||||
<link rel="stylesheet" href="/book.min.e161f1fe2b283b6a43c29a52fde96e2387fade573e78efa6701d44c8499da76b.css" integrity="sha256-4WHx/isoO2pDwppS/eluI4f63lc+eO+mcB1EyEmdp2s=">
|
||||
<script defer src="/en.search.min.c80848d3c77260233d9a08502d528e5cb516bb11e5df300ef34c5507c61f37fd.js" integrity="sha256-yAhI08dyYCM9mghQLVKOXLUWuxHl3zAO80xVB8YfN/0="></script>
|
||||
<link rel="alternate" type="application/rss+xml" href="https://kfcfans.gitee.io/tags/index.xml" title="OhMyScheduler" />
|
||||
<!--
|
||||
Made with Book Theme
|
||||
https://github.com/alex-shpak/hugo-book
|
||||
@ -31,7 +31,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
|
||||
<nav>
|
||||
<h2 class="book-brand">
|
||||
<a href="/ohmyscheduler"><span>OhMyScheduler</span>
|
||||
<a href="/"><span>OhMyScheduler</span>
|
||||
</a>
|
||||
</h2>
|
||||
|
||||
@ -83,7 +83,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/startup/1-server-startup/" class="">调度中心(Server)部署</a>
|
||||
<a href="/docs/startup/1-server-startup/" class="">调度中心(Server)部署</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -93,7 +93,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/startup/2-worker-startup/" class="">执行器(Worker)初始化</a>
|
||||
<a href="/docs/startup/2-worker-startup/" class="">执行器(Worker)初始化</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -103,7 +103,17 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/startup/3-processor-develop/" class="">处理器编写</a>
|
||||
<a href="/docs/startup/3-processor-develop/" class="">处理器开发</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/docs/startup/4-console-guide/" class="">任务管理与在线运维</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -116,10 +126,10 @@ https://github.com/alex-shpak/hugo-book
|
||||
|
||||
|
||||
|
||||
<li class="book-section-flat" >
|
||||
<li>
|
||||
|
||||
|
||||
<span>Shortcodes</span>
|
||||
<span>高级特性</span>
|
||||
|
||||
|
||||
|
||||
@ -134,7 +144,7 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/columns/" class="">Columns</a>
|
||||
<a href="/docs/super/container/" class="">容器</a>
|
||||
|
||||
|
||||
</li>
|
||||
@ -144,7 +154,13 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/details/" class="">Details</a>
|
||||
<a href="/docs/super/openapi/" class="">OpenAPI</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
</li>
|
||||
@ -154,51 +170,16 @@ https://github.com/alex-shpak/hugo-book
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/expand/" class="">Expand</a>
|
||||
<span>更新日志</span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/hints/" class="">Hints</a>
|
||||
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/katex/" class="">Katex</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/mermaid/" class="">Mermaid</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<a href="/ohmyscheduler/docs/shortcodes/tabs/" class="">Tabs</a>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<ul>
|
||||
|
||||
</ul>
|
||||
|
||||
@ -239,13 +220,13 @@ https://github.com/alex-shpak/hugo-book
|
||||
|
||||
<div class="flex align-center justify-between">
|
||||
<label for="menu-control">
|
||||
<img src="/ohmyscheduler/svg/menu.svg" class="book-icon" alt="Menu" />
|
||||
<img src="/svg/menu.svg" class="book-icon" alt="Menu" />
|
||||
</label>
|
||||
|
||||
<strong>Tags</strong>
|
||||
|
||||
<label for="toc-control">
|
||||
<img src="/ohmyscheduler/svg/toc.svg" class="book-icon" alt="Table of Contents" />
|
||||
<img src="/svg/toc.svg" class="book-icon" alt="Table of Contents" />
|
||||
</label>
|
||||
</div>
|
||||
|
||||
|
@ -2,12 +2,12 @@
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>Tags on OhMyScheduler</title>
|
||||
<link>https://kfcfans.gitee.io/ohmyscheduler/tags/</link>
|
||||
<link>https://kfcfans.gitee.io/tags/</link>
|
||||
<description>Recent content in Tags on OhMyScheduler</description>
|
||||
<generator>Hugo -- gohugo.io</generator>
|
||||
<language>en-us</language>
|
||||
|
||||
<atom:link href="https://kfcfans.gitee.io/ohmyscheduler/tags/index.xml" rel="self" type="application/rss+xml" />
|
||||
<atom:link href="https://kfcfans.gitee.io/tags/index.xml" rel="self" type="application/rss+xml" />
|
||||
|
||||
|
||||
</channel>
|
||||
|
Loading…
x
Reference in New Issue
Block a user