Petals-SE-ASE

Prérequis

Installation et démarrage de Apache ActiveMQ:

  • Dézipper le tar/gz
  • Dans le répertoire activemq : bin/activemq start

Note : l'administration des queues ActiveMQ doit se trouver à l'adresse http://localhost:8161/admin/queues.jsp (pour observer le cycle de vie et le fonctionnement des queues du SE ASE, au déploiement des SU).

Déploiement du composant dans Petals.

Fonctions / architecture

(Pour les détails, voir la spécification du SE-ASE).

Le SE, intercalé entre un client et un service, assure une garantie de livraison des échanges basée sur ActiveMQ (JMS).
ActiveMQ se charge du stockage et de la réémission des échanges, le cas échéant.

Seuls les MEP InOnly et RobustInOnly sont supportés pour le "provides", et le même MEP est utilisé pour le "consumes", sauf configuration spéficique (en cas de "consumes" en InOut, la réponse sera ignorée).

Le client, au lieu d'appeler le service directement, appelle un service intermédiaire défini dans la partie "provides" d'une SU déployée sur le SE ASE. Le SE ASE appelle ensuite le service, spécifié dans la partie "consumes" de la SU.
La médiation entre le "provides" et le "consumes" est assurée par JMS, via une queue, avec un mécanisme configurable de réémissions.

Le "provides" est fourni par un module appelé "posting process" (JBI Listener), qui reçoit les appels du client.
Le "consumes" est fourni par un module appelé "sending process" (listener JMS), qui transmet les appels au service.
Entre ces deux modules, JMS est chargé de la livraison fiable de l'échange.

Chaque SU pilote la création d'un certain nombre de queues JMS :

  • <persistence-area> = la queue principale
  • <persistence-area>_sending = une queue technique chargée des réémissions (erreurs, timeouts...)
  • <persistence-area-fault> = une queue pour stocker les échanges dont le retour est FAULT (erreur fonctionnelle)

Lorsqu'un échange n'a pu être livré malgré les réémissions prévues, il est stocké dans la "dead letter queue" d'ActiveMQ.

Le mécanisme entre le "posting process" (PP) et le "sending process" (SP) est le suivant :

  • Le SP écoute 2 queues JMS : <persistence-area> et <persistence-area>_sending (en mode transacted / AUTO_ACKNOWLEDGE).
  • Un échange est reçu par le PP
  • Il est mis dans la queue JMS <persistence-area>, que le SP écoute.
  • Le SP reçoit l'échange et valide la lecture du message JMS ("commit").

Le SP tente alors de transmettre l'échange au service :

  • En cas de fault, le SP stocke l'échange dans la queue <persistence-area-fault>.
  • En cas d'erreur ou de timeout, le SP stocke l'échange dans la queue <persistence-area>_sending.

Si l'échange a été mis dans la queue <persistence-area>_sending, le SP est à nouveau activé, mais avec un comportement différent :

  • Le SP tente de transmettre l'échange au service
  • En cas d'erreur, il ne valide pas le message (rollback), ce qui déclenche la politique de réémission par JMS (et de nouvelles activations du SP, en fonction de cette politique).
  • En cas de fault, le SP stocke l'échange dans la queue <persistence-area-fault>.

Si une erreur persiste, JMS finira par mettre l'échange dans la DLQ (dead letter queue).

Configuration

Paramètres du composant :

Paramètre Description Défaut
activemq-connection-user   ActiveMQ default user (null)
activemq-connection-password   ActiveMQ default password (null)
activemq-broker-url   ActiveMQ default broker URL (failover://tcp://localhost:61616)
java-naming-factory-initial    
java-naming-provider-url    
jms-connection-factory-jndiname    
stop-timeout   0

Paramètres du "provides" dans une SU :

Paramètre Description Défaut
persistence-area-name Nom de la queue JMS principale <provides-service-name>
persistence-area-name-fault Nom de la queue JMS pour les erreurs fonctionnelles (FAULT) <provides-service-name>_error
persistence-area-name-error Nom de la queue JMS pour les erreurs <provides-service-name>_error
persistence-area-name-timedout Nom de la queue JMS pour les timeout <provides-service-name>_error
persistence-area-name-expired   <provides-service-name>_expired
mustBeAutomaticallyStarted Activation au démarrage de la SU true

Paramètres du "consumes" dans une SU :

Paramètre Description Défaut
mustBeAutomaticallyStarted Activation au démarrage de la SU true
retry-policy-number Nombre maximal de réémissions 3
retry-policy-base-interval Intervalle de base entre deux réémissions (secondes) 10
retry-policy-factor Facteur multiplicatif de l'intervalle entre deux réémissions 3
time-to-live   time-to-live du CDK, ou 0 si absent
is-idempotent   true

Logging the ActiveMQ

Le SE ASE est basé sur ActiveMQ. Pour avoir accès à ses traces de log, il suffit d'ajouter ceci à la configuration de log de Petals ESB.

Petals.Container.Components.level=MONIT
# The following line enable debug traces from the SE ASE itself
Petals.Container.Components.petals-se-ase.level=FINE
# The following line enable debug traces from the underlying layer 'ActiveMQ'
org.apache.activemq.level=FINE

Administation JMX

MBean composant

Nom JMX : org.ow2.petals.se.ase:name=<component-identification>

Le SE-ASE instancie un MBean "composant", exposant ses principaux attributs de configuration, au démarrage.

Attributs :

Nom Type
JavaNamingFactoryInitial String
JavaNamingProviderUrl String
JmsConnectionFactoryJndiname String
ActivemqConnectionUser String
ActivemqConnectionPassword String
ActivemqBrokerUrl String
StopTimeout integer

MBean SU

Nom JMX : org.ow2.petals.se.ase:su=<su-name>

Chaque SU instancie au démarrage son propre MBean, lequel expose, outre ses attributs de configuration, les opérations suivantes :

  • start / stop du "sending process" (si le SP est arrêté, les messages éventuels s'accumulent dans la queue JMS, en attendant le démarrage ultérieur du SP).
  • start / stop du "posting process" (si le PP est arrêté, le service fourni par la SU rejette tout appel provenant d'un client).

Attributs :

Nom Type
PersistenceAreaName String
PersistenceAreaNameError String
PersistenceAreaNameFault String
PersistenceAreaNameTimedout String
ProvidesAutomaticallyStarted boolean
ConsumesEndpoint String
ConsumesAutomaticallyStarted boolean
ConsumesIdempotent boolean
ConsumesTTL integer
ConsumesRetryPolicyNumber integer
ConsumesRetryPolicyBaseInterval integer
ConsumesRetryPolicyFactor integer

Opérations :

startPostingProcess
stopPostingProcess
startSendingProcess
stopSendingProcess

Utilisation de JMS comme transport alternatif

Soit la configuration suivante :

  • Une SU avec "posting process" seul démarré
  • Une autre SU avec "sending process" seul démarré

Dans la mesure où les mêmes queues seraient utilisées, un appel au "provides" de la première SU déclencherait un appel au "consumes" de la seconde.

Ceci fournit un transport JMS alternatif au transport de Petals.

Labels

components-se-family components-se-family Delete
Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.