« Hem

En integration från grunden

Vafalls, inget blogginlägg förra veckan? Skäms på mig!

Till mitt försvar kan jag dock säga att jag har haft fullt upp. Vi har dels varit i Finland och träffat våra finska kollegor i integrationsteamet på Fortum (mer om det senare!) och dessutom har vi startat ett nytt projekt, där jag är med och utvecklar integrationerna. Hittills i jobbet har jag mest hanterat befintliga integrationer, försökt förstå vad som händer och felsökt dem vid problem, men nu handlar det alltså om att bygga upp nya integrationer från grunden, vilket är väldigt spännande!

Jag tänkte ta det här tillfället i akt och beskriva hur detta kan göras. Vi har till en början två system som behöver kommunicera med varandra. Systemen, vi kan kalla dem A och B, exponerar webbtjänster (web services) mot omvärlden, och det är genom dessa som de kommunicerar med varandra. Webbtjänster är ett standardiserat sätt för applikationer att kommunicera över internet genom att skicka XML-meddelanden, utan att de behöver veta något om varandras interna logik.

Men, även om tjänsterna gör att applikationer kan kommunicera med varandra utan att känna till logiken, så krävs det ändå att de känner till vilken typ av XML-meddelanden som tjänsterna tar in och skickar tillbaks. Så länge vi bara har system A och B så är detta inget direkt problem, men vad händer när system C, D och E kommer in i bilden, och alla systemen behöver byta information med varandra?

Capture2

Helt plötsligt måste alla system vara medvetna om varandra, och ändringar i ett system påverkar alla som har kopplingar till det. Detta kallas ofta  ”point to point integration” eller ”spagettiintegration”, och de största nackdelen är att det efter ett tag blir svårt att hålla ordning på alla integrationer, och snart sitter man med en härva.. spagetti…

Spaghetti Girl

Bildkälla

Lösningen på det här problemet är, som jag har varit inne på tidigare, att använda en integrationsplattform, till exempel BizTalk Server, som sköter all kommunikation mellan systemen. Det blir betydligt lättare att övervaka alla transaktioner mellan systemen, och underlättar om ett system ska läggas till eller tas bort.

Capture

Men i alla fall – åter till den integrationen jag bygger! System A ska anropa en webbtjänst hos system B, men för att undvika framtida ”spagettiintegrationer” har vi skapat en mellanliggande webbtjänst i BizTalk som tar emot ett meddelande från system A och i sin tur anropar tjänsten hos system B. Det gör att systemen inte behöver veta något om varandras tekniker, och det är enkelt att lägga till ytterligare system som vill ha data från webbtjänsten.

Hur görs detta i praktiken då? Jo, vi har skapat något som kallas för en orkestrering i BizTalk och sedan exponerat den som en tjänst. En orkestrering är ett sätt att visuellt modellera ett processflöde för ett meddelande, och det kan se ut ungefär såhär:

ork2

System A anropar vår orkestrering, som alltså exponeras som en webbtjänst, och i orkestreringen kan vi sen grafiskt modellera vad vi vill ska hända. I det här fallet lagrar vi först en variabel, ett id som vi vill ha koll på under hela processen, sedan använder vi en ”sändmodul” för att göra ett anrop till B-s webbtjänst, och via en ”mottagningsmodul” tar vi emot svaret från den.

Svaret kommer i ett format specificerat för system B och i nästa steg använder vi en ”tilldelningsmodul” för plocka fram informationen som vi fick från B-s webbtjänst. Informationen berättar för oss om allt gick bra, och det kollar vi genom en beslutsmodul, vilket leder till ett vägskäl i processen: om allt gick bra vill vi lagra informationen vi fick tillbaks, och om det inte gjorde det sparar vi felmeddelandet från tjänsten.

Det allra sista vi gör är sedan att konstruera det meddelande som system A väntar sig tillbaks. Vi mappar då informationen som vi lagrade i vägvalet innan det till det format som A vill ha, och om allt har gått bra så skickas sedan svaret till system A. Det allra sista blocket är ett så kallat ”catch-block”, som är orkestreringens motsvarighet till ett catch-statement i kod, och det kommer fånga upp oväntade fel i orkestreringen. Om vi inte använder ett sådant block så kommer processen avstanna, och system A kommer stå och vänta på ett svar som aldrig kommer.

Förhoppningsvis ger detta lite inblick i hur en integration kan se ut i praktiken, även om det här blev en något förenklad beskrivning.

Nu önskar jag och Integrationsbolaget er en riktigt glad påsk!

 

 

Leave a Reply

Language: