Agrégateur d'intégration Spring :signification de la configuration XML « send-timeout »

StackOverflow https://stackoverflow.com//questions/25089371

  •  02-01-2020
  •  | 
  •  

Question

J'apprécierais quelques éclaircissements sur la signification du paramètre de configuration "send-timeout" pour un agrégateur.Basée sur la documentation Spring, cette configuration est The timeout interval for sending the aggregated messages to the output or reply channel. Optional.

Maintenant, d'après ma compréhension, l'agrégateur est un composant passif et ne décide d'envoyer ou non un message qu'en fonction du résultat de la stratégie de publication après la réception d'un message ;il ne publiera pas de messages basés sur des événements de délai d'attente, pour cela, un composant Reaper distinct est nécessaire. Est-ce correct?

En supposant que le délai d'expiration d'envoi correspond au temps maximum que l'agrégateur peut consacrer à l'envoi du groupe de messages terminé au canal de sortie.Que se passerait-il si le temps s'écoulait (en raison de la configuration de ce paramètre) lors de l'envoi d'un message.Comment l'agrégateur gérera-t-il ce groupe de messages qui était prêt à être publié, dont l'envoi a commencé mais n'a jamais été terminé ?Sera-t-il marqué comme terminé ?

Merci

Était-ce utile?

La solution

Il s’agit d’un attribut assez souvent mal compris.Dans de nombreux endroits (mais pas tous), nous l'avons expliqué clairement dans le XSD et la documentation.

En fin de compte, il est rarement appliqué.Cela ne s'applique que lorsque le canal de sortie peut bloquer.Par exemple, si le output-channel est un QueueChannel avec un capacity et la file d'attente est pleine ;c'est le moment où nous attendrons pour envoyer le message à la chaîne.

Si le canal de sortie est, par exemple, un DirectChannel, cela ne s'applique jamais.

Si cela s’applique, l’exception sera renvoyée à l’appelant et le groupe restera.Des tentatives de réédition de ces groupes se produiront si vous configurez un MessageGroupStoreReaper;si le groupe est toujours éligible à la libération, le faucheur tentera à nouveau d'envoyer le groupe vers le canal de sortie.

Le groupe "bloqué" sera également libéré si de nouveaux messages arrivent pour le même groupe et que la stratégie de libération considère toujours le groupe éligible (par ex.il utilise size >= n plutôt que size == n).

BTW, bien que l'agrégateur soit généralement un composant passif, nous avons introduit le group-timeout (et group-timeout-expression) en 4.0 qui permet de libérer des groupes partiels après un timeout, même sans faucheur.

Toutefois, si une telle libération ne se produit pas en raison de send-timeout, une nouvelle tentative de release ne sera effectuée que si un reaper est configuré.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top