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.