2017-10-10 4 views
0

Nous avons un travail s'exécutant dans Spring batch chaque jour de la semaine, déclenché à partir d'un autre système. Parfois, plusieurs instances du travail doivent être exécutées le même jour. Chacun a déclenché de l'autre système. Chaque travail s'exécute pendant environ une heure et s'il y a plusieurs instances de travail à exécuter, nous rencontrons des problèmes avec les données.Instances de travail de file d'attente dans Spring Batch

Nous souhaitons optimiser cette étape comme suit, si aucune instance de travail n'est en cours d'exécution, puis en démarrer une nouvelle, si une instance de travail est en cours d'exécution, placez-la dans une file d'attente. Chaque instance de travail doit être TERMINÉE avant que la suivante ne soit déclenchée. Si l'un échoue, le suivant doit attendre. Les paramètres du travail sont un incrémenteur et un horodatage.

J'ai googlé un peu mais ne trouve rien que je trouve utile. Donc, je me demande si cela est duable, pour mettre en file d'attente des instances de travail dans le lot de printemps? Si oui, comment je fais ça? J'ai regardé dans l'intégration de printemps et le lancement de travail-passerelle mais je ne vois pas vraiment comment l'implémenter, je suppose que je ne comprends pas comment cela fonctionne. J'essaie de lire à propos de ces choses mais je ne comprends toujours pas. Peut-être que j'ai les mauvaises versions de lot de printemps? Peut-être qu'il me manque quelque chose?

Si vous avez besoin de plus d'informations de moi s'il vous plaît faites le moi savoir! Merci! Nous utilisons des noyaux à ressort et des haricots à ressort. 3.2.5, intégration par ressort 1.2.2, noyau d'intégration à ressort 3.0.5, fichier d'intégration de ressort, flux de données, flux de données, flux 2.0.3

+0

Cochez cette case https://stackoverflow.com/questions/37405659/can-spring-provide-concept-like-job-queue –

Répondre

0

Eh bien, si vous êtes bon pour avoir Spring Integration dans votre application avec le Spring Batch, ce serait vraiment une excellente idée de tirer parti de la capacité job-launching-gateway. A droite, vous pouvez placer vos tâches dans la file d'attente - essentiellement QueueChannel.

Le point d'extrémité pour interroger ce canal peut être configuré avec le max-message-per-poll="1" pour interroger à partir de la file d'attente interne une seule tâche à la fois. Lorsque vous venez d'interroger un message, envoyez-le dans le job-launching-gateway et en même temps sur le composant Bus de contrôle, la commande pour arrêter ce point d'interrogation ne touche pas les autres messages dans la file d'attente jusqu'à la fin du travail en cours. Lorsque le travail est COMPLETED, vous pouvez envoyer un message de contrôle supplémentaire pour démarrer ce noeud final d'interrogation. Assurez-vous d'utiliser tous les modules Spring Integration dans la même version: spring-integration-core 3.0.5, spring-integration-file, -http, -sftp, -stream 3.0.5, ainsi .