Spring Integration Messaging Template

Sebbene Spring Integration fornisca degli strumenti atti a creare un ambiente non invasivo, talvolta è necessario invocare delle funzioni dal codice dell’applicazione.

Per far fronte a questi casi, viene fornito un Messaging Template che supporta diverse operazioni, ad esempio è possibile inviare una richiesta ed aspettare una rispota.


MessagingTemplate template = new MessagingTemplate();
Message reply = template.sendAndReceive(someChannel, new GenericMessage("test"))

In questo esempio viene creato un canale temporaneo all’interno del template, è anche possibile settare sendTimeout e receiveTimeout.


public boolean send(final MessageChannel channel, final Message<?> message) { ... }

public Message<?> sendAndReceive(final MessageChannel channel, final Message<?> request) { .. }

public Message<?> receive(final PollableChannel<?> channel) { ... }

Configurare i Message Channel


<int:channel id="exampleChannel"/>

Di default viene sempre creato un canale Point-to-Point. Ecco invece il codice per creare un PublishSubscribeChannel:


<int:publish-subscribe-channel id="exampleChannel"/>

Quando si utilizza l’elemento <channel /> senza alcun figlio, viene creato un DirectChannel (un SubscribableChannel). Se vengono invece fornite delle <queue />, il tipo di canale sarà Pollable.

Direct Channel

Il DirectChannel, come già detto, è il canale di default. Il balancer abilitato è il round-robin ed è automaticamento il failover (per sapere di cosa si tratta, si rimanda alla documentazione ufficiale). Per disabilitarli è necessario utilizzare l’attributo figlio <dispatcher /> e configurarne gli attributi:


<int:channel id="failFastChannel">
<int:dispatcher failover="false"/>
</channel>

<int:channel id="channelWithFixedOrderSequenceFailover">
<int:dispatcher load-balancer="none"/>
</int:channel>

Negli articoli successivi vedremo altri tipi di canali.

Leave a Reply