2020-05-20 21:29:41 +08:00

454 lines
20 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en" dir=>
<head>
<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中央仓库推荐地址&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 最后,初始化客户端,完成执行器的启动,代码示例如下:">
<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中央仓库推荐地址&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 最后,初始化客户端,完成执行器的启动,代码示例如下:" />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://kfcfans.gitee.io/ohmyscheduler/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&#43;eO&#43;mcB1EyEmdp2s=">
<script defer src="/ohmyscheduler/en.search.min.1272dfb3df2a3f60e11485e0a1158d434da32177db3be3e28aae8e28aa7e9a15.js" integrity="sha256-EnLfs98qP2DhFIXgoRWNQ02jIXfbO&#43;Piiq6OKKp&#43;mhU="></script>
<!--
Made with Book Theme
https://github.com/alex-shpak/hugo-book
-->
</head>
<body dir=>
<input type="checkbox" class="hidden" id="menu-control" />
<main class="container flex">
<aside class="book-menu">
<nav>
<h2 class="book-brand">
<a href="/ohmyscheduler"><span>OhMyScheduler</span>
</a>
</h2>
<div class="book-search">
<input type="text" id="book-search-input" placeholder="Search" aria-label="Search" maxlength="64" data-hotkeys="s/" />
<div class="book-search-spinner hidden"></div>
<ul id="book-search-results"></ul>
</div>
<ul>
<li>
<span>快速开始</span>
<ul>
<li>
<a href="/ohmyscheduler/docs/startup/1-server-startup/" class="">调度中心Server部署</a>
</li>
<li>
<a href="/ohmyscheduler/docs/startup/2-worker-startup/" class="active">执行器Worker初始化</a>
</li>
<li>
<a href="/ohmyscheduler/docs/startup/3-processor-develop/" class="">处理器编写</a>
</li>
</ul>
</li>
<li class="book-section-flat" >
<span>Shortcodes</span>
<ul>
<li>
<a href="/ohmyscheduler/docs/shortcodes/columns/" class="">Columns</a>
</li>
<li>
<a href="/ohmyscheduler/docs/shortcodes/details/" class="">Details</a>
</li>
<li>
<a href="/ohmyscheduler/docs/shortcodes/expand/" class="">Expand</a>
</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>
</li>
</ul>
</nav>
<script>(function(){var menu=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(event){localStorage.setItem("menu.scrollTop",menu.scrollTop);});menu.scrollTop=localStorage.getItem("menu.scrollTop");})();</script>
</aside>
<div class="book-page">
<header class="book-header">
<div class="flex align-center justify-between">
<label for="menu-control">
<img src="/ohmyscheduler/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" />
</label>
</div>
<input type="checkbox" class="hidden" id="toc-control" />
<aside class="hidden clearfix">
<nav id="TableOfContents">
<ul>
<li><a href="#基于宿主应用的执行器初始化">基于宿主应用的执行器初始化</a>
<ul>
<li></li>
</ul>
</li>
</ul>
</nav>
</aside>
</header>
<article class="markdown"><h2 id="基于宿主应用的执行器初始化">基于宿主应用的执行器初始化</h2>
<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>&amp;<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">&lt;dependency&gt;</span>
<span style="color:#f92672">&lt;groupId&gt;</span>com.github.kfcfans<span style="color:#f92672">&lt;/groupId&gt;</span>
<span style="color:#f92672">&lt;artifactId&gt;</span>oh-my-scheduler-worker<span style="color:#f92672">&lt;/artifactId&gt;</span>
<span style="color:#f92672">&lt;version&gt;</span>1.2.0<span style="color:#f92672">&lt;/version&gt;</span>
<span style="color:#f92672">&lt;/dependency&gt;</span>
</code></pre></div><p>其次,填写执行器客户端配置文件<code>OhMyConfig</code>,各参数说明如下表所示:</p>
<table>
<thead>
<tr>
<th>属性名称</th>
<th>含义</th>
<th>默认值</th>
</tr>
</thead>
<tbody>
<tr>
<td>appName</td>
<td>宿主应用名称,需要提前在控制台完成注册</td>
<td>无,必填项,否则启动报错</td>
</tr>
<tr>
<td>port</td>
<td>Worker工作端口</td>
<td>27777</td>
</tr>
<tr>
<td>serverAddress</td>
<td>调度中心oh-my-scheduler-server地址列表</td>
<td>无,必填项,否则启动报错</td>
</tr>
<tr>
<td>storeStrategy</td>
<td>本地存储策略,枚举值磁盘/内存大型MapReduce等会产生大量Task的任务推荐使用磁盘降低内存压力否则建议使用内存加速计算</td>
<td>StoreStrategy.DISK磁盘</td>
</tr>
<tr>
<td>maxResultLength</td>
<td>每个Task返回结果的默认长度超长将被截断。过长可能导致网络拥塞</td>
<td>8096</td>
</tr>
<tr>
<td>enableTestMode</td>
<td>是否启用测试模式启用后无需Server也能顺利启动OhMyScheduler-Worker用于处理器本地的单元测试</td>
<td>false</td>
</tr>
</tbody>
</table>
<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">@Configuration</span>
<span style="color:#66d9ef">public</span> <span style="color:#66d9ef">class</span> <span style="color:#a6e22e">OhMySchedulerConfig</span> <span style="color:#f92672">{</span>
<span style="color:#a6e22e">@Bean</span>
<span style="color:#66d9ef">public</span> OhMyWorker <span style="color:#a6e22e">initOMS</span><span style="color:#f92672">()</span> <span style="color:#66d9ef">throws</span> Exception <span style="color:#f92672">{</span>
<span style="color:#75715e">// 服务器HTTP地址端口号为 server.port而不是 ActorSystem port
</span><span style="color:#75715e"></span> List<span style="color:#f92672">&lt;</span>String<span style="color:#f92672">&gt;</span> serverAddress <span style="color:#f92672">=</span> Lists<span style="color:#f92672">.</span><span style="color:#a6e22e">newArrayList</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;127.0.0.1:7700&#34;</span><span style="color:#f92672">,</span> <span style="color:#e6db74">&#34;127.0.0.1:7701&#34;</span><span style="color:#f92672">);</span>
<span style="color:#75715e">// 1. 创建配置文件
</span><span style="color:#75715e"></span> OhMyConfig config <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> OhMyConfig<span style="color:#f92672">();</span>
config<span style="color:#f92672">.</span><span style="color:#a6e22e">setPort</span><span style="color:#f92672">(</span>27777<span style="color:#f92672">);</span>
config<span style="color:#f92672">.</span><span style="color:#a6e22e">setAppName</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;oms-test&#34;</span><span style="color:#f92672">);</span>
config<span style="color:#f92672">.</span><span style="color:#a6e22e">setServerAddress</span><span style="color:#f92672">(</span>serverAddress<span style="color:#f92672">);</span>
<span style="color:#75715e">// 如果没有大型 Map/MapReduce 的需求,建议使用内存来加速计算
</span><span style="color:#75715e"></span> <span style="color:#75715e">// 为了本地模拟多个实例,只能使用 MEMORY 启动(文件只能由一个应用占有)
</span><span style="color:#75715e"></span> config<span style="color:#f92672">.</span><span style="color:#a6e22e">setStoreStrategy</span><span style="color:#f92672">(</span>StoreStrategy<span style="color:#f92672">.</span><span style="color:#a6e22e">MEMORY</span><span style="color:#f92672">);</span>
<span style="color:#75715e">// 2. 创建 Worker 对象,设置配置文件
</span><span style="color:#75715e"></span> OhMyWorker ohMyWorker <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> OhMyWorker<span style="color:#f92672">();</span>
ohMyWorker<span style="color:#f92672">.</span><span style="color:#a6e22e">setConfig</span><span style="color:#f92672">(</span>config<span style="color:#f92672">);</span>
<span style="color:#66d9ef">return</span> ohMyWorker<span style="color:#f92672">;</span>
<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>
<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=&lt;appName&gt; [-l=&lt;length&gt;] [-p=&lt;storeStrategy&gt;]
[-s=&lt;server&gt;]
OhMyScheduler-Worker代理
-a, --app=&lt;appName&gt; worker-agent名称可通过调度中心控制台创建
-h, --help Show this help message and exit.
-l, --length=&lt;length&gt; 返回值最大长度
-p, --persistence=&lt;storeStrategy&gt;
存储策略枚举值DISK 或 MEMORY
-s, --server=&lt;server&gt; 调度中心地址,多值英文逗号分隔,格式 IP:Port OR domain
-V, --version Print version information and exit.
</code></pre><p>Docker镜像<a href="https://hub.docker.com/r/tjqq/oms-agent">Docker Hub</a></p>
</article>
<footer class="book-footer">
<div class="flex flex-wrap justify-between">
</div>
</footer>
<div class="book-comments">
</div>
<label for="menu-control" class="hidden book-menu-overlay"></label>
</div>
<aside class="book-toc">
<nav id="TableOfContents">
<ul>
<li><a href="#基于宿主应用的执行器初始化">基于宿主应用的执行器初始化</a>
<ul>
<li></li>
</ul>
</li>
</ul>
</nav>
</aside>
</main>
</body>
</html>