Cómo modificar el número máximo de conexiones de Kettle Slavererver
Al usar ftp para descargar el complemento, se encontró que se ejecutaba normalmente cuando se ejecutaba localmente, pero al seleccionar la ejecución remota y especificar el servidor remoto, se encontró un error: Se produjo un error al obtener el archivo desde FTP: El usuario no puede iniciar sesión. Según el mensaje de error, se puede juzgar que el motivo es que no se pudo iniciar sesión a través de ftp. En cuanto al motivo específico, no se puede localizar. Para aclararlo, surgió la idea de depurar la operación remota. Y, por cierto, comprendí en profundidad el principio de funcionamiento de la tetera y estudié el código fuente.
Pensamiento
El servidor Kettle es en realidad un servidor web basado en Jetty y un contenedor de servlets de código abierto integrado. Este servidor web proporciona principalmente un entorno de transformación. Otra función importante es proporcionar servlets para la comunicación y el control entre clientes, servidores maestros y servidores esclavos. La comunicación entre el servidor maestro y el servidor esclavo se realiza a través de httpClient y los datos de comunicación se transfieren en formato xml. A través de los servlets proporcionados, puede iniciar, detener, pausar una transformación o un trabajo, obtener el estado de una transformación o un trabajo, registrar un subservidor, obtener una lista de subservidores y más.
De hecho, la idea y el método utilizados por LZ son muy simples: iniciar un servidor Carte a través del código Java en eclipse y luego ejecutar el trabajo de forma remota utilizando el servidor especificado como operador.
Cree el entorno de inicio del servicio Carte
Primero, cree un proyecto Java normal. Si no hay un entorno de código fuente Kettle, puede crear un proyecto Maven para poder acceder directamente. desde el almacén central Obtenga el paquete jar y el código fuente. Sucede que LZ compiló el código fuente de la tetera antes y lo importó a eclipse como un proyecto, por lo que el código fuente y el paquete de jarra de la tetera relacionado ya existen.
Después de crear el proyecto, debe agregar el paquete jar relevante a la ruta de acceso de Java. Los siguientes paquetes jar también se pueden obtener desde el directorio lib de la herramienta PDI:
Después de agregar el paquete de dependencia al proyecto, puede crear una clase para iniciar el servicio Carte:
clase pública CarteServer {
publicstaticvoid main(String[] args) lanza una excepción {
SlaveServerConfig config =new SlaveServerConfig("192.168. 31.43", 7088,true);//ip y el puerto son los mismos que a través de Carte. Se especifican los mismos parámetros cuando se inicia .bat.
Carte.runCarte(config);//Iniciar Carte a través de este método estático
}
}
Iniciar la depuración remota p> p>
1. Inicie el servicio Carte Después de crear la clase CarteServer, depúrela directamente como --> aplicación java para iniciar el servicio Carte. Puede ver la siguiente información en la consola:
<. p>2016/ 08/11 10:55:55 - Carta - Crear escucha de servicio web @ Dirección.192.168.31.43:70882016-08-11 10:55:55.912:INFO::jetty- 6.1.26
2016-08-11 10:55:55.933:INFO::Started SocketConnector @ 192.168.31.43:7088
2. El siguiente trabajo es del archivo de descarga del servidor FTP:
3. Debido a que este trabajo utiliza el complemento de descarga FTP, la clase JobEntryFTP correspondiente en el código fuente, abra esta clase y coloque un punto de interrupción en la ejecución ( ) método: p>
4. Ejecute el trabajo, seleccione ejecución remota y seleccione la clase CarteServer anterior al iniciar el servidor (primero debe crear un nuevo subservidor en la cuchara). herramienta):
5. Observe la ubicación del punto de interrupción para ver si ha entrado en depuración:
Ya está. a por qué el complemento de descarga ftp producirá un error durante la ejecución remota.
Proceso de ejecución remota
El usuario ejecuta el trabajo del hervidor y selecciona "ejecución remota", activando así el método org.pentaho.di.job.sendToSlaveServer, que primero genera metadatos del trabajo. descripción en formato XML.
Llame al método sendXML() de SlaveServer para enviar estos metadatos al servidor de tarjetas remoto.
Después de recibir la solicitud, AddJobServlet en el lado del servidor ingresará el método doGet() para construir la entidad de trabajo basada en los metadatos y guardar el trabajo en JobMap.
En el método sendToSlaveServer, después de enviar el XML al servidor carte, llame al método execService() del SlaveServer para iniciar el trabajo remoto
En este momento, el StartJobServlet en el El lado del servidor recibe la solicitud y permite que el trabajo (en realidad un hilo) realice una serie de trabajos de inicialización y finalmente llama al método de inicio del trabajo para comenzar.