Message resequencing with OSB 12c

Répondant à un besoin métier bien particulier, Oracle a ajouté la fonctionnalité de reséquencement des messages par l’ESB, cette fonctionnalité existait déjà dans le médiator de la SOA Suite, donc en bénéficier sans passer par un composite est impossible.
Le reséquencement permet d’ordonner le traitement des messages reçus d’une manière désordonnée, (traitement par lot, dépliement d’une file d’attente par plusieurs threads…), suivant une logique basée sur les données du message, si le besoin technique ou métier exige un ordre bien particulier.
Prenons par exemple un cas où on veut insérer les employés dans une base de données, mais d’une manière ordonnée en se basant sur leurs numéros de salarié.

Configuration du resequencer

La configuration consiste donc à activer et configurer le resequencing sur le pipeline du flux :

Ensuite choisir le niveau sur lequel on va définir l’utiliser :

  • Pipeline : pour le définir pour toutes les opérations.
  • Opération : pour le définir pour une opération bien précise


On peut définir ensuite l’identifiant qui va servir pour gérer l’ordre des messages, pour cet exemple on choisit le numéro employé :

Ensuite on pourra définir les autres paramètres optionnels en cas de besoin :
Dans cet exemple, la séquence commence à 20, s’incrémente avec 1, et toutes les séquences partagent le même groupe par défaut.
Une fois le pipeline déployé, la table OSB_SERVICE_DETAIL est chargée par la configuration, et le pipeline est prêt pour re-séquencer les messages :

Test du resequencer configuré

Maintenant, pour simuler le comportement du recequencer, on va essayer d’insérer des employés, mais pas nécessairement ordonnés.
On commence par insérer un employé avec le numéro 20, ce qui correspond à la séquence attendue :

L’employé est enregistré systématiquement car il correspond à la séquence attendue, mais maintenant on va essayer d’insérer un employé avec un ID = 22 :

On constate que l’employé n’est pas enregistré, car le resequencer a bloqué le traitement du message et attend un message avec l’employé 21 d’abord.
Dans la table OSB_RESEQUENCER_MESSAGE il y a une nouvelle ligne insérée, qui correspond au message suspendu et en attente de traitement de la séquence 21 :

Maintenant, on va envoyer le message pour l’employé 21 :

Et on constate que les employés 21 et 22 sont créés :