«Spring Integration as Integration Patterns Provider»
-
Upload
it-weekend -
Category
Technology
-
view
311 -
download
6
description
Transcript of «Spring Integration as Integration Patterns Provider»
April 12, 2023
Spring Integrationas Integration Patterns provider
Blynov Viacheslav
Dnepropetrovsk
April 12, 2023 2
Introduction
3 April 12, 2023
Spring Integration Goals Provide a simple model for implementing complex enterprise
integration solutions.
Facilitate asynchronous, message-driven behavior within a Spring-based application.
Promote intuitive, incremental adoption for existing Spring users.
Spring Integration Introduction
4 April 12, 2023
Spring Integration Features Implementation of most of the Enterprise Integration Patterns
– Endpoint
– Channel
– Aggregator
– Filter
– …
Integration with External Systems
– REST/HTTP
– FTP
– JMS
– …
The framework has extensive JMX support
– exposing framework components as MBeans
– adapters to obtain attributes from MBeans, invoke operations, send/receive notifications
Spring Integration Introduction
5 April 12, 2023
Spring Integration Endpoints
AMQP
Spring Application Events
File System
FTP
Gemfire
HTTP/REST
JDBC
JMX
JPA
MongoDB
Redis
RMI
TCP
UDP
XMPP
Spring Integration Introduction
April 12, 2023 6
Main Components
7 April 12, 2023
Main Components Message Message Channel Message Endpoint
– Transformer
– Filter
– Router
– Splitter
– Aggregator
– Service Activator
– Channel Adapter
– Gateway
Spring Integration Main Components
8 April 12, 2023
Spring Integration Main Components
Message Message is a generic
wrapper for any Java object combined with metadata used by the framework while handling that object
9 April 12, 2023
Spring Integration Main Components
Message Channel Point-To-Point Channel Publish/Subscribe Channel Pollable Channels Message-Driven Channels
10 April 12, 2023
Spring Integration Main Components
Message Endpoint
Encapsulates communication-specific details:
converts/extracts business data to/from message
sends/receives messages to/from message channel
11 April 12, 2023
Spring Integration Main Components
Transformer Message Transformer is
responsible for converting a Message's content or structure and returning the modified Message
12 April 12, 2023
Spring Integration Main Components
Filter Message Filter determines
whether a Message should be passed to an output channel at all
13 April 12, 2023
Spring Integration Main Components
Splitter Splitter is another type of
Message Endpoint whose responsibility is to accept a Message from its input channel, split that Message into multiple Messages, and then send each of those to its output channel.
14 April 12, 2023
Spring Integration Main Components
Service Activator
Service Activator is a generic endpoint for connecting a service instance to the messaging system.
The input Message Channel must be configured, and if the service method to be invoked is capable of returning a value, an output Message Channel may also be provided.
15 April 12, 2023
Spring Integration Main Components
Gateway
The Gateway encapsulates messaging-specific code (e.g., the code required to send or receive a message) and separates it from the rest of the application code. The Messaging Gateway exposes a business function to the rest of the application so that instead of requiring the application to set properties like Message.
April 12, 2023 16
Example
17 April 12, 2023
Task We receive JMS messages with some CompoundObject in JSON format
CompoundObject is-a list of some Objects
We need to extract all Objects from CompoundObject and save them to database (possibly performing some other business logic)
Those Objects which are considered “good” (verified against some rule) should be sent via JMS to another queue in JSON format
Spring Integration Example
18 April 12, 2023
Spring Integration Example
We need to add the following dependencies in pom.xml
19 April 12, 2023
Spring Integration Example
Specify JMS connection factory
20 April 12, 2023
Spring Integration Example
Configure Spring Integration context
21 April 12, 2023
Spring Integration Example
Configure Spring Integration context
CompObjectDTO parseCompoundObject(String payload)
22 April 12, 2023
Spring Integration Example
Configure Spring Integration context
CompObjectDTO parseCompoundObject(String payload)
List<ObjectDTO> splitCompound(CompObjectDTO dto)
23 April 12, 2023
Spring Integration Example
Configure Spring Integration context
CompObjectDTO parseCompoundObject(String payload)
List<ObjectDTO> splitCompound(CompObjectDTO dto)
Object convertToEntity(ObjectDTO dto)
24 April 12, 2023
Spring Integration Example
Configure Spring Integration context
CompObjectDTO parseCompoundObject(String payload)
List<ObjectDTO> splitCompound(CompObjectDTO dto)
Object convertToEntity(ObjectDTO dto)
Object saveEntity(Object obj)
25 April 12, 2023
Spring Integration Example
Configure Spring Integration context
CompObjectDTO parseCompoundObject(String payload)
List<ObjectDTO> splitCompound(CompObjectDTO dto)
Object convertToEntity(ObjectDTO dto)
Object saveEntity(Object obj)
boolean isGoodObject(Object obj)
26 April 12, 2023
Spring Integration Example
Configure Spring Integration context
CompObjectDTO parseCompoundObject(String payload)
List<ObjectDTO> splitCompound(CompObjectDTO dto)
Object convertToEntity(ObjectDTO dto)
Object saveEntity(Object obj)
boolean isGoodObject(Object obj)
ObjectDTO convertToDTO(Object obj)
27 April 12, 2023
Spring Integration Example
Configure Spring Integration context
CompObjectDTO parseCompoundObject(String payload)
List<ObjectDTO> splitCompound(CompObjectDTO dto)
Object convertToEntity(ObjectDTO dto)
Object saveEntity(Object obj)
boolean isGoodObject(Object obj)
ObjectDTO convertToDTO(Object obj)
String serializeObjectDTO(ObjectDTO obj)
28 April 12, 2023
Spring Integration Example
Receiving messages via HTTP REST
29 April 12, 2023
Another option: JMS backed message channels
Channel adapter are intended for applications that are integrating with other external systems. There are cases where both the producer and consumer for a given JMS Destination are intended to be part of the same application, running within the same process.
<int-jms:channel id="jmsChannel" queue="exampleQueue"/>
<int-jms:publish-subscribe-channel id="jmsChannel" topic="exampleTopic"/>
Support of transactions (“transaction-manager” atrribute) Support for connection (session, consumer) cache Concurrency (number of concurrent sessions/consumers to start for
each listener)
Spring Integration Example
30 April 12, 2023
Task 2 An exteranl system feeds us with stream of JSON objects putting them
to JMS queue
We need to make some calculations (business logic) using these objects in the order as they come
Depending on calculationd results we could change the persistent state of our domain objects
Incoming objects should be saved to our DB
Finally, the results of calculation should be sent in JSON format to another JMS queue
Spring Integration Example
31 April 12, 2023
Basic FlowSpring Integration Example
Receive objects
Validationconvertion to entity
Calculation
Analyze and save results
Send to outbound JMS
Save entities to DB
32 April 12, 2023
RouterSpring Integration Example
• Payload Type Router• Header Value Router• Recipient List Router• XPath Router (Part of the XML Module)• Error Message Exception Type Router• (Generic) Router
33 April 12, 2023
ProblemSpring Integration Example
The incoming messages could arrive very frequently
34 April 12, 2023
AggregatorSpring Integration Example
• Message Store• Correlation Strategy (delaults to grouping be MessageHeader.CORRELATION_ID)• Release Strategy• Expiration policy
35 April 12, 2023
Back to task 2: receive and aggregateSpring Integration Example
36 April 12, 2023
Back to task 2: receive and aggregateSpring Integration Example
boolean canReleaseMessages(List<IncObject>)
List<IncObject> aggregate(List<IncObject>)
Object getCorrelationKey(IncObject)
37 April 12, 2023
Back to task 2: routingSpring Integration Example
38 April 12, 2023
Back to task 2: via publish-subscribe channelSpring Integration Example
39 April 12, 2023
Task summary Built on the top of other Spring modules (e. g. Spring JMS)
Every element of the chain – just a simple POJO
High cohesion
Easy to cover with unit-tests
“Convention over configuration” – bean with name “connectionFactory” will be found automatically
Change the whole business flow only by configuration
Spring Integration Example
April 12, 2023 40
Spring Integration VS Apache Camel
41 April 12, 2023
Both projects aim to fill similar need: light-weight integration library with full implementations of EIP
Apache Camel introduces DSL (Java, Scala, Groovy). Spring Integration - only XML
Apache Camel supports longer list of technologies
Apache Camel offers rich support for both integration and unit-testing. Spring Integration supports just generic Spring Test
Apache Camel Community is larger, documentation is better
Spring Integration Spring Integration VS Apache Camel
42 April 12, 2023
Apache Camel Java DSL Example
final JaxbDataFormat jaxbDataFormat = new JaxbDataFormat();
jaxbDataFormat.setContextPath(“test.ns.oxm");
jaxbDataFormat.setPartClass(“test.ns.oxm.ABSPartnerChangesEventType");
from("activemq:incoming.partner")
.log("log:test.log")
.choice() .when(header("EVENTTYPE").isEqualTo(“TESTVALUE")).to("direct:createPartner“) .when(header("EVENTTYPE").isEqualTo(“TESTVALUE2")).to("direct:updatePartner");
from("direct:createPartner")
.errorHandler(noErrorHandler())
.unmarshal(jaxbDataFormat)
.beanRef(“partnerChangeHandler", "createPartner");
from("direct:updatePartner")
.errorHandler(noErrorHandler())
.unmarshal(jaxbDataFormat)
.beanRef(“partnerChangeHandler", "updatePartner");
Spring Integration Spring Integration VS Apache Camel
43 April 12, 2023
Recent changes Spring EL support (3.0.2)
HTTP request mapping (based on Spring MVC infrastructure) (3.0.2)
Enhanced support for MongoDB, Redis and JPA (3.0.2)
@EnableIntegration, @IntegrationComponentScan (4.0.2)
Requires Spring 4.0 (4.0.2)
Spring Integration Example
April 12, 2023 44
Questions?