Aprendizaje rápido: desarrolle su tarea

Desarrolla tu tarea

Esta sección quiere presentarle cómo desarrollar su tarea, incluidos Java y Shell, y usar su IDE familiar para depurar.

Pero debe tenerse en cuenta que una vez que se desarrolla el trabajo, es necesario implementarlo en el Ejecutor para que funcione.

Para saber cómo implementar, consulte la sección "Implementación de Saturn Executor".

0 condición previa

Asegúrese de haber implementado Saturn Console. Si no es así, consulte la sección "Implementación de la consola Saturn".

1 Desarrollar trabajos de Java

1.1 Agregar dependencia de maven

Agregar dependencia en pom.xml

<dependency>
    <groupId>com.vip.saturn</groupId>
    <artifactId>saturn-job-api</artifactId>
    <!-- 修改成指定版本 -->
    <version>master-SNAPSHOT</version>
</dependency>  

Y plugin

<plugin>
  <groupId>com.vip.saturn</groupId>
  <artifactId>saturn-plugin</artifactId>
  <!-- 版本与saturn-job-api一致 -->
  <version>master-SNAPSHOT</version>
</plugin>

1.2 Desarrollar el primer trabajo de Java

Modifique la clase actual o agregue una nueva clase, herede de AbstractSaturnJavaJob e implemente el método handleJavaJob .

    public class DemoJob extends AbstractSaturnJavaJob {
    
    

    	@Override
    	public SaturnJobReturn handleJavaJob(final String jobName, final Integer shardItem, final String shardParam, final SaturnJobExecutionContext context) {
    
    
    	// do what you want here ...
              
    	// 返回一个SaturnJobReturn对象,默认返回码是200表示正常的返回
            		return new SaturnJobReturn("我是分片"+shardItem+"的处理结果");
	    }
    }

El método handleJavaJob es el principal punto de entrada para la llamada de trabajo. Cuando llegue el período de programación, Saturn llamará a este método.

Los parámetros entrantes son los siguientes:

  • jobName: nombre del trabajo
  • shardItem: número de fragmento (a partir de 0) parámetro de fragmento (configurado en la consola)
  • shardParam: parámetros de fragmentación (configurados en la consola)
  • contexto: contexto de llamada

Lo anterior solo muestra cómo escribir una tarea simple. La tarea real es mucho más complicada . Algunas herramientas y métodos proporcionados por AbstractSaturnJavaJob pueden reducir su carga de trabajo. Se pueden ver más métodos abstractSaturnJavaJob en el tutorial.

Acerca de JavaJobReturn

JavaJobReturn es la encapsulación de la devolución del resultado del trabajo. Hay tres variables miembro, que incluyen:

  • returnCode: código de resultado. 0 representa que el resultado es correcto y los valores restantes representan un error. El valor predeterminado es 0. Los usuarios pueden establecer el valor de retorno de acuerdo con su propio negocio, pero tenga en cuenta que los siguientes códigos de retorno son palabras reservadas y no se pueden usar, incluidos: 0, 1, 2, 9999.
  • returnMsg: devolver información. Se mostrará en la consola. No existe un valor predeterminado.
  • errorGroup: código de excepción. Consulte el tutorial para obtener más detalles.

1.3 Depurar el trabajo en el IDE

Este paso iniciará un proceso de Ejecutor en el IDE.

1.3.1 Eclipse

Haga clic derecho en el proyecto -> Ejecutar / Depurar como -> Ejecutar configuración

Inserte la descripción de la imagen aquí

  • espacio de nombres: el espacio de nombres. Los espacios de nombres se utilizan para agrupar trabajos. Los trabajos deben pertenecer a un determinado espacio de nombres. Los nombres de trabajos en el mismo espacio de nombres no se pueden repetir.
  • ejecutorName: el identificador único del nodo de ejecución

1.3.2 IDEA IntelliJ

Inserte la descripción de la imagen aquí

Agregar parámetros de inicio:

saturn: ejecutar -Dnamespace = www.abc.com -DexecutorName = exec01 -DVIP_SATURN_CONSOLE_URI = http: //127.0.0.1: 9088

Consulte la sección 3.1 para conocer el significado de los parámetros.

1.4 Agregar trabajo de Java en la consola

Cuando el IDE inicia el Ejecutor, el trabajo aún no se puede ejecutar hasta que se agregue el trabajo de Java correspondiente y se inicie en la Consola.

Para agregar un trabajo Java a la consola, la clase de implementación del trabajo debe ser el nombre de clase del trabajo Java que está implementando.

Inserte la descripción de la imagen aquí

  • Tipo de trabajo: dividido en trabajo de sincronización de Java y trabajo de sincronización de Shell, seleccione el trabajo de sincronización de Java aquí
  • Nombre del trabajo: identificación del ID del trabajo, debe ser único en el espacio de nombres
  • Clase de realización del trabajo: el nombre completo del paquete + el nombre de la clase de la clase de realización del trabajo
  • expresión cron: expresión de tiempo de trabajo
  • Número total de fragmentos de trabajo: indica el número de ejecuciones simultáneas.2 significa que el trabajo tiene dos procesos ejecutándose al mismo tiempo, y cada proceso tiene su propio script y parámetros especiales (estos procesos pueden estar ejecutándose en diferentes máquinas).
  • Tabla de comparación de parámetros / números de secuencia de fragmentos: defina la ruta de script completa y los parámetros de cada ejecución de fragmentos. Este es uno de los parámetros más importantes de Saturno. El número de fragmentos comienza en 0 y el máximo es el número total de fragmentos -1.
  • Información sobre la descripción del puesto ( opcional ): descripción del puesto

La configuración más avanzada se puede editar en la página de edición de trabajos.

Entonces comienza este trabajo

Inserte la descripción de la imagen aquí

Si todo es normal, verá el registro de ejecución del trabajo en la consola del IDE, y también puede ver el resultado de la ejecución en la pestaña "Fragmentación". (Por supuesto, la premisa es que el trabajo se ejecuta al final)

El siguiente es el registro de ejecución exitosa:

[2017-12-13 15:09:45.206] [INFO] [executor_001_echoJavaJob-saturnQuartz-worker] [com.vip.saturn.job.basic.AbstractSaturnJob] >>> [echoJavaJob] msg=Job echoJavaJob handle items: [0, 1]
[2017-12-13 15:09:45.206] [INFO] [Saturn-echoJavaJob-1-thread-1] [com.vip.saturn.job.java.SaturnJavaJob] >>> [echoJavaJob] msg=Running SaturnJavaJob,  jobClass is com.test.DemoJob 
[2017-12-13 15:09:45.207] [INFO] [Saturn-echoJavaJob-1-thread-3] [com.vip.saturn.job.java.SaturnJavaJob] >>> [echoJavaJob] msg=Running SaturnJavaJob,  jobClass is com.test.DemoJob 
[2017-12-13 15:09:45.207] [INFO] [executor_001_echoJavaJob-saturnQuartz-worker] [com.vip.saturn.job.basic.AbstractSaturnJob] >>> [echoJavaJob] msg=echoJavaJob finished, totalCost=1, return={0=SaturnJobReturn [returnCode=0, returnMsg=我是分片0的处理结果, errorGroup=200, prop={SATURN_TRACE_ID=4882587783541623202, SATURN_PARENT_SPAN_ID=1611817686233844130}], 1=SaturnJobReturn [returnCode=0, returnMsg=我是分片1的处理结果, errorGroup=200, prop={SATURN_TRACE_ID=4418419319829081425, SATURN_PARENT_SPAN_ID=3024241466322103633}]}

Aquí está el resultado visto por la consola:
Inserte la descripción de la imagen aquí

1.5 Empaquetado e implementación

Si no hay ningún problema con los pasos anteriores, significa que el trabajo se verifica localmente. Ahora puede implementar.

Ejecute el siguiente comando para empaquetar

mvn saturn:zip

Obtendrá un paquete comprimido de ** - app.zip ** en el directorio / target. Siga la guía de implementación para implementar el paquete comprimido en el ejecutor.

Cuando hayas completado este paso, tu trabajo se habrá desarrollado y depurado. Consulta la sección "Implementación de Saturn Executor" para saber cómo implementar el trabajo empaquetado en Executor para que se ejecute.

2 Desarrollar trabajos de Shell

Los trabajos de Shell en realidad no se limitan a los scripts de Shell, sino que también pueden ser todos los scripts y programas que se pueden ejecutar en el servidor donde se encuentra Executor. El lenguaje de desarrollo de scripts / programas no está limitado, y puede ser Python / Java / PHP / Ruby ...

El principio específico se muestra en la siguiente figura. Cuando se cumplan las condiciones de programación, Saturn Executor llamará a System.exec () para llamar al script / programa.

Inserte la descripción de la imagen aquí

2.1 Desarrollar el primer trabajo de Shell

Hay dos formas de desarrollo de trabajos de caparazón:

  • Fácil desarrollo: escriba directamente scripts de shell en el cuadro de texto de la Consola Saturn, sin colocar scripts en Executor, este método es adecuado para ejecutar scripts simples
  • Desarrollo de la secuencia de comandos: implemente la secuencia de comandos / programa en una ruta específica y luego configure la ruta de ejecución de la secuencia de comandos en la consola Saturn.

Elija cualquier método para crear un nuevo trabajo de Shell de acuerdo con las necesidades reales

2.1.1 Desarrollo simple

Primero ingrese el dominio predeterminado (o dominio personalizado) a través de la página de inicio
Inserte la descripción de la imagen aquí

Luego, haz clic en el botón "Agregar" para agregar una nueva tarea.
Inserte la descripción de la imagen aquí

Luego agregue un trabajo de Shell, ingrese el script de Shell en el cuadro de entrada "Parámetros de fragmentación"
Inserte la descripción de la imagen aquí

Finalmente haga clic en "Aceptar" para guardar

2.1.2 Desarrollo de guiones

También puede elegir scripts para desarrollar trabajos de Shell.

Primero prepare el script, cree un nuevo script demojob.sh en el directorio / apps / sh , el contenido del script:

#/bin/sh
echo "hello world"

Luego agregue permisos ejecutables al script:

chmod +x /apps/sh/demojob.sh

Agregar trabajo de Shell después de la preparación del script
Inserte la descripción de la imagen aquí

Preste atención a la configuración del parámetro de fragmentación, el valor del parámetro es el comando para ejecutar el script /apps/sh/demojob.sh.

Finalmente haga clic en "Aceptar" para guardar.

2.2 Iniciar Ejecutor

Shell no puede usar el complemento de Maven para depurar como Java. Necesitamos descargar e iniciar un paquete Executor estándar para verificar el script que acabamos de desarrollar. Consulte la guía de implementación de Saturn Executor para obtener más detalles .

Para los trabajos de Shell, la implementación de Executor es más simple que la de los trabajos de Java. Simplemente descargue, descomprima y ejecute el comando de inicio del script.

2.3 Iniciar el trabajo

Cuando se inicia el Ejecutor, el trabajo no se ejecutará automáticamente hasta que se inicie el trabajo de Shell correspondiente en la Consola de Saturn.

Inserte la descripción de la imagen aquí

Si todo es normal, verá el registro de ejecución del trabajo en la consola del IDE, y también puede ver el resultado de la ejecución en la pestaña "Fragmentación". (Por supuesto, la premisa es que el trabajo se ejecuta al final)

El siguiente es el registro de ejecución exitosa:

[2017-12-13 17:17:25.119] [INFO] [Saturn-echoShellJob-2-thread-2] [com.vip.saturn.job.shell.ScriptJobRunner] >>> [echoShellJob] msg=echoShellJob-0: hello world

[2017-12-13 17:17:25.120] [INFO] [Saturn-echoShellJob-2-thread-2] [com.vip.saturn.venus.util.HemersCounter] >>> msg=reported event to herms, type:SATURN.EXECUTOR.FOR.NABOO, title:Job item stop, jobName is echoShellJob, item is 0, msg:executorName is executor_001, domain is yfb-saturn-executor.vip.vip.com
[2017-12-13 17:17:25.120] [INFO] [executor_001_echoShellJob-saturnQuartz-worker] [com.vip.saturn.job.basic.AbstractSaturnJob] >>> [echoShellJob] msg=echoShellJob finished, totalCost=24ms, return={0=SaturnJobReturn [returnCode=0, returnMsg=the exit value is 0, errorGroup=200, prop={}]}

Aquí está el resultado visto por la consola:

Inserte la descripción de la imagen aquí

¡Hasta ahora, su primer trabajo de Shell se ha desarrollado con éxito!

3 Integrar primavera

Esta función es compatible desde la versión 3.3.0.

Descarga el proyecto de demostración saturn-demo-spring

3.2.1 Depende de Saturno-primavera

<dependency>
    <groupId>com.vip.saturn</groupId>
    <artifactId>saturn-spring</artifactId>
    <!-- 修改成指定版本 -->
    <version>master-SNAPSHOT</version>
</dependency>

3.2.2 Configurar saturn.properties

Agregue saturn.propertiesarchivos en el directorio raíz de classpath y agregue la configuración app.class.

app.class=com.vip.saturn.job.spring.GenericSpringSaturnApplication

GenericSpringSaturnApplicationUsará ClassPathXmlApplicationContext, cargue el applicationContext.xmlarchivo para iniciar Spring.

3.2.3 Primavera de inicio personalizada

  • Puede escribir GenericSpringSaturnApplicationuna subclase, reescribir su método y configurarlo app.classpara lograr el propósito de personalizar Spring.

  • Si desea personalizar el archivo xml que se carga al inicio, puede anular el getConfigLocations()método.

  • Si desea iniciar Spring completamente personalizado, puede anular el run()método.

4 Integrar SpringBoot

Esta función es compatible desde la versión 3.3.0.

Descargue el proyecto de demostración saturn-demo-springboot

4.2.1 Depende de saturn-springboot

<dependency>
    <groupId>com.vip.saturn</groupId>
    <artifactId>saturn-springboot</artifactId>
    <!-- 修改成指定版本 -->
    <version>master-SNAPSHOT</version>
</dependency>

4.2.2 Configurar saturn.properties

Agregue saturn.propertiesarchivos en el directorio raíz de classpath y agregue la configuración app.class.

app.class=com.vip.saturn.job.springboot.GenericSpringBootSaturnApplication

GenericSpringBootSaturnApplicationSe utilizará SpringApplication.run(source())para iniciar SpringBoot.

4.2.3 Inicio personalizado SpringBoot

  • Puede escribir GenericSpringBootSaturnApplicationuna subclase, anular su método y configurarla app.classcomo esta clase para lograr el propósito de personalizar SpringBoot.

  • Si desea personalizar el origen de la carga de inicio, puede anular el source()método.

  • Si desea iniciar SpringBoot completamente personalizado, puede anular el run()método.

5 Uso integrado de Saturno (no recomendado)

Debido a que el uso integrado de Saturn, su método de empaquetado, modo de operación y ejecución de parámetros de jvm dependen del marco principal del proyecto (como Spring, Tomcat, etc.), lo que hace que Saturn ClassLoader no se pueda separar del ClassLoader comercial, lo que resulta en una separación de registros, conflictos de paquetes, etc. Problemas y provocaron que el Executor reiniciara con una tecla, la actualización automática y otras funciones fallaran. Por lo tanto, no recomendamos el uso de archivos integrados.

Aquí, presentamos el uso embebido de Saturn en el entorno Spring o SpringBoot. El plugin saturn-plugin ya no es necesario. El inicio o la detención de Saturn Executor depende del inicio o detención de Spring.

Esta función es compatible desde la versión 3.3.0.

Descargue el proyecto de demostración saturn-demo-springboot-embedded

5.2.1 Depende de saturn-embed-spring

<dependency>
    <groupId>com.vip.saturn</groupId>
    <artifactId>saturn-embed-spring</artifactId>
    <!-- 修改成指定版本 -->
    <version>master-SNAPSHOT</version>
</dependency>

5.2.2 Registrar la aplicación EmbeddedSpringSaturn

@Bean
public EmbeddedSpringSaturnApplication embeddedSpringSaturnApplication() {
    
    
  EmbeddedSpringSaturnApplication embeddedSpringSaturnApplication = new EmbeddedSpringSaturnApplication();
  embeddedSpringSaturnApplication.setIgnoreExceptions(false);
  return embeddedSpringSaturnApplication;
}

El ejemplo anterior está registrado en el entorno SpringBoot. Si se utiliza el entorno Spring, puede registrar el bean configurando xml.

EmbeddedSpringSaturnApplicationEl ContextRefreshedEventevento del contenedor Spring será monitoreado para iniciar el Saturn Executor, y el ContextClosedEventevento será monitoreado para detener elegantemente al Saturn Executor.

Entre ellos, setIgnoreExceptions()si se establece el método true, cuando se produce una excepción cuando se inicia o detiene el Ejecutor, solo se imprimirá el registro de advertencia, no se falselanzará ninguna excepción y el funcionamiento del contenedor Spring no se verá afectado; si se establece , no solo se imprimirá el registro, sino que también se lanzará una excepción, afectando Inicio y parada del contenedor Spring.

Supongo que te gusta

Origin blog.csdn.net/weixin_42528266/article/details/108603334
Recomendado
Clasificación