32
mule and message-based integration - using an esb dr gerald loeffler, mba senior architect/developer objectlab financial ltd http://www.gerald-loeffler.net/download/mule_javaabend_2007-10-22.pdf

mule and message-based integration - gerald loeffler and message-based integration ... transformation transport mediation distributed /federated? mule and message-based integration

  • Upload
    vuanh

  • View
    243

  • Download
    2

Embed Size (px)

Citation preview

mule

and m

ess

age-b

ase

d

inte

gra

tion -

using a

n e

sbdrger

ald

loeffler

, m

ba

senior arc

hitec

t/dev

eloper

objectlabfinancial ltd

http://w

ww.ger

ald

-loeffler

.net/d

ownload/m

ule_javaaben

d_2007-10-2

2.pdf

refe

rences and reso

urc

es

•m

ule res

ourc

es

▫[1] web

site/

wiki/guid

es http://w

ww.m

uleso

urc

e.org

▫m

ailin

g list

▫ex

am

ples (!)

2

▫so

urc

e co

de (!)

•[2

] "p

atter

ns of en

terp

rise

integra

tion arc

hitec

ture

", gre

gor

hohpeet al.

▫[3

] http://w

ww.eaip

attern

s.co

m/

•[4

] "C

om

bin

ing Ser

vice-Orien

ted A

rchitec

ture

and E

ven

t-Driven

Arc

hitec

ture

using an E

nterp

rise

Ser

vice Bus", jean-

louis

mare

chaux, ibm

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

conte

nts

•m

ule by exam

ple

•m

essa

ge-base

d integra

tion

•in

troduction to esb

sand m

ule

•m

ule’s core

abstra

ctions

3

•m

ule’s core

abstra

ctions

•a close

r look at th

e ex

am

ple

•gotchas/ id

iom

s /p

atter

ns

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

4

startin

g/s

toppin

g, co

nfigura

tion, dep

loym

ent options

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

5

jms, sto

re-a

nd-forw

ard

mes

sagin

g, pip

es-a

nd-filters arc

hitec

ture

s,

enterp

rise

integra

tion patter

ns

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

mess

agin

g-a

bst

ractions and jm

ste

rmin

olo

gy

•m

essa

ge

▫hea

der

▫body

•m

essa

ge des

tination

6

▫queu

e, topic

•m

essa

ge pro

duce

r

▫queu

e se

nder

, to

pic publish

er

•m

essa

ge co

nsu

mer

▫queu

e re

ceiver

, to

pic subsc

riber

•de-co

upling of pro

duce

r and consu

mer

▫addre

ss space

/jvm

, tim

e, language

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

store

-and-f

orw

ard

vs.

client-

serv

er m

ess

agin

g7

mes

sage

pro

duce

rQ1

mes

sage

consu

mer

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

mes

sage

pro

duce

rQ1

Q1

mes

sage

consu

mer

filter

pip

es-

and-f

ilte

rs a

rchitectu

re

8

pip

efilter

pip

e

messageproducer

messageconsumer

messageconsumer

messageproducer

filter

mes

sage

pro

duce

r

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

pip

efilter

pipepip

e

messageproducer

messageconsumer

messageconsumer

messageproducer

ente

rprise

inte

gra

tion p

att

ern

s

9

content-base

d router

mes

sage filter

dynam

ic router

routing slip

pro

cess

manager

envelope wra

pper

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

dynam

ic router

recipient list

splitter

aggre

gato

r

rese

quen

cer

envelope wra

pper

content en

rich

er

content filter

claim

chec

k

norm

alize

r

sourc

e: w

ww.eaip

atter

ns.co

m/ G. Hohpeet al.

10

what’s an esb

?, m

ule

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

esb

–patt

ern

or pro

duct?

•"A

n E

nterp

rise

Ser

vice Bus is an architectural patternand

can be im

plem

ented by m

any different productswithin

the

org

anization, and ass

embled together

to act as a federated

bus. M

ore

and m

ore

ven

dors are

now offer

ing a complete

product

to fulfill enterprise integrationnee

ds." [4

]

11

product

to fulfill enterprise integrationnee

ds." [4

]

•"c

om

bin

es event-driven

and service orientedappro

ach

es to

sim

plify integra

tion of busines

s units, bridgin

g

heter

ogen

eous platform

s and environm

ents. The ESB acts

as an interm

ediary

layer

to enable communicationbetwee

n

differe

nt applica

tion pro

cess

es." [4]

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

esb

–patt

ern

or pro

duct?

•"facilitates and sim

plifies

busines

s in

tegra

tion thro

ugh

transport, event and mediation services

. It connec

ts and

med

iates all com

munications and intera

ctions betwee

n

heter

ogen

eous nodes

, both

in a Ser

vice-Orien

ted

Arc

hitec

ture

(sy

nch

ronous one-to

-one appro

ach

) and an

12

Arc

hitec

ture

(sy

nch

ronous one-to

-one appro

ach

) and an

Even

t-Driven

Arc

hitec

ture

(asy

nch

ronous m

any-to-m

any

appro

ach

)." [4

]

•es

bch

ara

cter

istics

/fea

ture

s:

▫su

pports sy

nch

ronous and asy

nch

ronous in

tera

ction

▫m

essa

ge ro

uting and tra

nsform

ation

▫transp

ort m

ediation

▫distributed /feder

ated?

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

mule

1/2

•ev

ent-base

d open

-sourc

e es

b

▫ev

ent ≈ m

essa

ge

•m

atu

re, pro

prietary

(non-jbi) arc

hitec

ture

•active co

mm

unity

13

•active co

mm

unity

•in

tegra

tes nicely w

ith spring

•su

pports m

any tra

nsp

orts/

pro

toco

ls

▫ejbin

voca

tion (jrm

p, iiop), em

ail (sm

tp, pop3, im

ap), file, ftp

, http/h

ttps, jdbc, jm

s, ipm

ulticast, tcp/ipin

cl. ss

l, udp,

soap/w

sdl(v

ia axis1, xfire

, glu

e), xm

pp, in

tern

al in

-mem

ory

("vm

") [1]

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

mule

2/2

•dep

loym

ent stand-a

lone or in

app ser

ver

(also as ra

r)

•fram

ework

for and im

plem

entations of

▫transform

ers

▫ro

uters

14

▫sp

litter

s/aggre

gato

rs

•transa

ction dem

arc

ation (loca

l and xa, plu

ggable)

•th

read, queu

e and pool m

anagem

ent

•cu

rren

tly 1.4.3

▫2.0

(late 2007) will be tightly integra

ted w

ith spring 2.x

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

15

even

t/m

essa

ge, connec

tor, endpoin

t, com

ponen

t, router, tra

nsform

er,

interc

epto

r, spring integra

tion

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

event and m

ess

age

•UM

OEven

t

▫all data sen

t or re

ceived

within

the m

ule environm

ent will be

pass

ed betwee

n com

ponen

ts as an U

MOEven

t

▫has a U

MOM

essa

ge

•UM

OM

essa

ge/ UM

OM

essa

geA

dapter

16

•UM

OM

essa

ge/ UM

OM

essa

geA

dapter

▫abstra

cts m

essa

ge im

plem

entations (jm

s, ftp

, file, so

ap, ...)

▫has a (typed

) payload and pro

per

ties

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

connecto

r: file

<connector

connector

connector

connectorname="file_connector"

className="org.mule.providers.file.FileConnector

FileConnector

FileConnector

FileConnector">

<properties>

<property name="moveToDirectory" value="${submitted_dir}" />

<property name="moveToPattern"

value="${ORIGINALNAME}.${DATE:yyyy-MM-dd_HH-mm-ss-SSS}" />

17

value="${ORIGINALNAME}.${DATE:yyyy-MM-dd_HH-mm-ss-SSS}" />

<property name="binary" value="false" />

<property name="autoDelete" value="false" />

</properties>

</connector

/connector

/connector

/connector>

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

•was unable to configure

it to

not m

ove/

delete files when

outb

ound com

munication fails

▫m

ake outb

ound com

munication im

poss

ible to fail

connecto

r: e

jb(s

lsb)

<connector

connector

connector

connectorname="ejb_connector"

className="org.mule.providers.ejb.EjbConnector

EjbConnector

EjbConnector

EjbConnector">

<properties>

<property name="jndiInitialFactory"

value="${jndi_initial_factory}" />

<property name="jndiProviderUrl" value="${jndi_provider_url}" />18

<property name="jndiProviderUrl" value="${jndi_provider_url}" />

<property name="securityPolicy" value="security.policy" />

</properties>

</connector

connector

connector

connector>

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

•fo

r ca

llin

g slsbm

ethod thro

ugh m

ule endpoin

ts

▫from

outb

ound or nes

ted routers (but pre

fer sp

ring to latter

)

•ejbco

ntain

er context is an "ea

rly bin

din

g" alter

native

•undocu

men

ted lookup/c

ach

ing beh

aviour fails on rec

onnec

t

▫pre

fer sp

ring jee:remote-slsbwhen

ever

poss

ible

jmsconnecto

r

<connector

connector

connector

connectorname="jms_connector"

className="org.mule.providers.jms.JmsConnector

JmsConnector

JmsConnector

JmsConnector">

<properties>

<property name="jndiInitialFactory"

value="${jndi_initial_factory}" />

<property name="jndiProviderUrl" value="${jndi_provider_url}" />19

<property name="jndiProviderUrl" value="${jndi_provider_url}" />

<property name="connectionFactoryJndiName"

value="ConnectionFactory" />

<property name="jndiDestinations" value="true" />

<property name="forceJndiDestinations" value="true" />

<property name="persistentDelivery" value="true" />

<property name="specification" value="1.1" />

<property name="maxRedelivery" value="5" />

</properties>

</connector

/connector

/connector

/connector>

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

endpoin

ts

<global

global

global

global- ---endpoints

endpoints

endpoints

endpoints>

<endpoint name="to_submit_dir" address="file://${to_submit_dir}"

connector="file_connector" transformers="f2s" />

<endpoint name="z_reviews_csv" address="vm://z_reviews_csv" />

<endpoint name="review"

address="ejb:/ReviewSLSBean?method=addReview"

20

address="ejb:/ReviewSLSBean?method=addReview"

connector="ejb_connector" remoteSync="true" />

<endpoint name="invalid_msg"

address="jms://queue/INT.INVALID_MESSAGE"

connector="jms_connector" transformers="o2jms" />

</global

/global

/global

/global- ---endpoints

endpoints

endpoints

endpoints>

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

•ce

ntral veh

icle for m

ules pro

toco

l/transp

ort abstra

ction

•bes

t defin

ed as global en

dpoin

ts

•only defin

e fixed

tra

nsform

ers =

> can am

end later

transf

orm

ers

<transformers

transformers

transformers

transformers>

<transformer name="f2s"

className="org.mule.providers.file.transformers.FileToString" />

<transformer name="o2jms" className=

"org.mule.providers.jms.transformers.ObjectToJMSMessage" />

</transformers

/transformers

/transformers

/transformers>

21

</transformers

/transformers

/transformers

/transformers>

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

•in

frastru

ctura

l, tec

hnical transform

ers pro

vid

ed by m

ule

•m

ore

busines

s-re

lated tra

nsform

ers written

in pro

jects

▫ex

tend org

.mule.tra

nsform

ers.A

bstra

ctTra

nsform

er

▫not a spring bea

n if co

nfigure

d via m

ule xm

l

�sim

ple tra

nsform

ation =

> tra

nsform

er, co

mplex =

> com

ponen

t

com

ponent and route

rs 1

<mule

mule

mule

mule- ---descriptor

descriptor

descriptor

descriptorname="z_filedrop"

implementation="org.mule.components.simple.PassThroughComponent

PassThroughComponent

PassThroughComponent

PassThroughComponent">

<inbound-router>

<global-endpoint name="to_submit_dir" />

</inbound-router>

<outbound-router>

22

<outbound-router>

<router className=

"org.mule.routing.outbound.OutboundPassThroughRouter">

<global-endpoint name="z_reviews_csv" />

</router>

</outbound-router>

<interceptor name="default" />

</mule

/mule

/mule

/mule- ---descriptor

descriptor

descriptor

descriptor>

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

com

ponent and route

rs 2

<mule

mule

mule

mule- ---descriptor

descriptor

descriptor

descriptorname="splitter" implementation=

"org.mule.components.simple.PassThroughComponent

PassThroughComponent

PassThroughComponent

PassThroughComponent">

<inbound-router>

<global-endpoint name="z_reviews_csv" />

</inbound-router>

<outbound-router>

23

<outbound-router>

<router className="util.esb.mule.LineSplitter

util.esb.mule.LineSplitter

util.esb.mule.LineSplitter

util.esb.mule.LineSplitter">

<global-endpoint name="z_review_csv" />

<properties>

<property name="preserveHeader" value="true" />

</properties>

</router>

</outbound-router>

<interceptor name="default" />

</mule

/mule

/mule

/mule- ---descriptor

descriptor

descriptor

descriptor>

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

com

ponent and route

rs 3

<mule

mule

mule

mule- ---descriptor

descriptor

descriptor

descriptorname="transformer"

implementation="zReviewCsvToReviewTransformer

zReviewCsvToReviewTransformer

zReviewCsvToReviewTransformer

zReviewCsvToReviewTransformer">

<inbound-router>

<global-endpoint name="z_review_csv" />

</inbound-router>

<outbound-router>

24

<outbound-router>

<router className=

"org.mule.routing.outbound.OutboundPassThroughRouter">

<global-endpoint name="review" />

</router>

</outbound-router>

<interceptor name="default" />

</mule

/mule

/mule

/mule- ---descriptor

descriptor

descriptor

descriptor>

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

conta

iner conte

xt and spring inte

gra

tion

<container

container

container

container- ---context

context

context

context

className='org.mule.extras.spring.SpringContainerContext

SpringContainerContext

SpringContainerContext

SpringContainerContext'>

<properties>

<property name="configFile"

value="springContext-monolith.xml" />

</properties>

25

</properties>

</container

/container

/container

/container- ---context

context

context

context>

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

•m

ule contain

ers are

extern

al co

mponen

t (!) factories

▫object/b

eans re

fere

nce

d w

ith implementationattribute

•oth

er contain

er context im

plem

entations

▫jn

ditree

, se

ssion ejbs, pico, plexus, hivem

ind[1]

•m

ule can also be co

nfigure

d and launch

ed entire

ly fro

m a

spring context (w

ithout a m

ule configxm

l)!

com

ponent exception str

ate

gy

<exception

exception

exception

exception- ---strategy

strategy

strategy

strategy

className="util.esb.mule.ExceptionAwareExceptionStrategy">

<global-endpoint name="invalid_msg" />

<global-endpoint name="manual_intervention" />

</exception

exception

exception

exception- ---strategy

strategy

strategy

strategy>

26

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

•handles ex

ceptions th

rown by com

ponen

ts

▫usu

ally busines

s ex

ceptions, i.e. pro

ject-d

epen

den

t

▫a spec

ial fo

rm of sy

nch

ronous co

ntent-base

d routing for

exce

ptions

public class ExceptionAwareExceptionStrategy

implements

ExceptionListener

{

public void exceptionThrown(Exception e) {...}

}

inte

rcepto

rs

<interceptor

interceptor

interceptor

interceptor- ---stack

stack

stack

stackname="default">

<interceptor className="util.esb.mule.LoggingInterceptor" />

</interceptor

/interceptor

/interceptor

/interceptor- ---stack

stack

stack

stack>

27

public class LoggingInterceptor

extends EnvelopeInterceptor

{

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

•cf. aoparo

und advice

•applies

to com

ponen

t in

voca

tions

▫not in

voked

for BridgeC

om

ponen

t

�use

Pass

Thro

ughCom

ponen

tin

stea

d

•fo

r deb

uggin

g, but also for m

essa

ge store

/histo

ry/a

udit

@Override public void before(Invocation i) {...}

@Override public void after(Invocation i) {...}

}

28

real-live m

ule configura

tion

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

29

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

gotc

has

•alw

ays co

nsu

lt javadocs

or so

urc

e

•m

ule-intern

al co

nfigof th

reads/

queu

es/tim

eouts

•tx

handling acr

oss

tra

nsp

orts (a

void

)

•jm

sco

nnec

tor num

ber

of se

ssions

30

•jm

sco

nnec

tor num

ber

of se

ssions

•co

mponen

t ex

ception handling and txro

llback

s

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

esb

/m

ule

design idio

ms/

patt

ern

s

•use

global en

dpoin

ts

•kee

p it sim

ple and use

spring w

her

e poss

ible

•database

acc

ess from

a m

ule node?

what db? how?

•leave re

mote oper

ations to

mes

sagin

g back

bone

31

•leave re

mote oper

ations to

mes

sagin

g back

bone

•isolate synch

ronous oper

ations

•tie in

to cep

/esp

(com

plex even

t pro

cess

ing/e

ven

t stre

am

pro

cess

ing) libra

ry like es

per

for ca

lculating statistics over

and analyzing/q

uer

yin

g m

essa

ge flows

▫statistics over

num

ber

/size/

type of m

essa

ges

per

tim

e unit/s

ender

▫re

al-tim

e outlier detec

tion in ter

ms of m

essa

ge size

/type

▫QoSm

onitoring

mule and m

essa

ge-

base

d integra

tion | ger

ald

loeffler | javaaben

d vienna | oct 2007

thank y

ou

drger

ald

loeffler

, m

ba

senior arc

hitec

t/dev

eloper

objectlabfinancial ltd

http://w

ww.ger

ald

-loeffler

.net/d

ownload/m

ule_javaaben

d_2007-10-2

2.zip