introduksjon til nservicebus

61
Introduksjon til NServiceBus NNUG 25.05.2010

Upload: sverre-hundeide

Post on 05-Dec-2014

2.604 views

Category:

Technology


5 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Introduksjon til NServiceBus

Introduksjon til NServiceBusNNUG 25.05.2010

Page 2: Introduksjon til NServiceBus

Sverre HundeideSeniorkonsulentItera Consulting (tidligere Objectware)Twitter: @sverrehundeideBlog: http://sverrehundeide.blogspot.com

Objectware har blitt Itera Consulting

Page 3: Introduksjon til NServiceBus

• Kort om messaging patterns• NServiceBus egenskaper og konfigurasjon• Demo• Spørsmål og diskusjon

Agenda

Page 4: Introduksjon til NServiceBus

• Utviklet av Udi Dahan • Andreas Öhlund og flere bidrar også

• Gjort om til Open Source i 2006• Versjon 2.0: Mars 2010

Historien til NServiceBus

Page 5: Introduksjon til NServiceBus

Bus vs. Broker

Broker, "hub and spoke"

Page 6: Introduksjon til NServiceBus

Bus vs. Broker

Page 7: Introduksjon til NServiceBus

Bus vs. Broker

"Busses rule, brokers drool"- Dru Sellers

Page 8: Introduksjon til NServiceBus

Oppsummert: En service bus er

DISTRIBUERT!

Page 9: Introduksjon til NServiceBus

• Skalerbarhet• Løse koplinger• Interoperabilitet• Robusthet

Generelle messaging fordeler

Page 10: Introduksjon til NServiceBus

• Asynkrone kommunikasjonstyper med messaging:• Store and forward (send and forget)• Send / Receive (Request / Response) • Publish / Subscribe

Messaging patterns støttet av NServiceBus

Page 11: Introduksjon til NServiceBus

Store and forward

• Asynkront:o Avsendertråden venter ikke

Page 12: Introduksjon til NServiceBus

Store and forward - Eksempel

Venter ikke på bekreftelse på at eposten har blitt sendt.

Page 13: Introduksjon til NServiceBus

Send / Receive (Request / Response)

Page 14: Introduksjon til NServiceBus

Send / Receive - Eksempel

Klienten:

Page 15: Introduksjon til NServiceBus

Send / Receive - Eksempel

Serveren:

Page 16: Introduksjon til NServiceBus

Send / Receive - Eksempel

Klienten – Håndtere svaret:

Page 17: Introduksjon til NServiceBus

Send / Receive 

Hvor skal svaret sendes?

Informasjon om svarkø ligger på MSQM-meldingen (standard MSMQ funksjonalitet).

Page 18: Introduksjon til NServiceBus

• En tråd ligger og venter på svar og kjører callbackmetoden når svar kommer.

• Er ikke robust

Send / Receive - Asynkonous callbacks

Page 19: Introduksjon til NServiceBus

Publish / Subscribe

Page 20: Introduksjon til NServiceBus

Publish / Subscribe

Page 21: Introduksjon til NServiceBus

Publish / Subscribe - Eksempel

Publisher:

Subscriptions gjøres til denne køen

Page 22: Introduksjon til NServiceBus

Publish / Subscribe - Eksempel

Subscriber:

Page 23: Introduksjon til NServiceBus

Publish / Subscribe - Eksempel

Subscriber:

Page 24: Introduksjon til NServiceBus

Publish / Subscribe - Eksempel

NServiceBus vil sende en subscription melding ved oppstart:

Page 25: Introduksjon til NServiceBus

• Ved pub/sub publiseres eventer• Ikke kommandoer (request meldinger)!

• Definerer en hendelse i fortid• Eksempel:

• OrderStatusChanged

Eventer

Page 26: Introduksjon til NServiceBus

• NServiceBus.dll• Alle interface ligger her, ingen implementasjon

• NServiceBus.Core.dll• Implementasjon av rammeverket• Generert med ILMerge• Inneholder mange eksterne avhengigheter:

• NHibernate og FluentNHibernate • Spring• Unntak: Log4Net, andre IoC-rammeverk enn Spring

• Forenkler deployment

NServiceBus assemblies

Page 27: Introduksjon til NServiceBus

NServiceBus konfigurasjon

Page 28: Introduksjon til NServiceBus

Konfigurasjon - Fluent API

Page 29: Introduksjon til NServiceBus

• Convention over configuration

Konfigurasjon

Page 30: Introduksjon til NServiceBus

• Forenkler bruken av NServiceBus• Basert på TopShelf

• Kan enkelt installeres som en Windows Service

• Deployes sammen med alle tjenester som skal motta, sende eller publisere meldinger

• Kan også bruke NServiceBus uten Generic Host

• Håndterer “Profiler”

Generic host

Page 31: Introduksjon til NServiceBus

• Marker interfaces som definerer default konfigurasjon:• AsA_Client, AsA_Server, AsA_Publisher

Konfigurasjon av Generic Host

• AsA_Publisher arver fra AsA_Server• AsA_Client kan ikke kombineres med AsA_Publisher

Page 32: Introduksjon til NServiceBus

• Default konfigurasjonsalternativer:

Konfigurasjon av Generic Host

Transaksjonell ImpersonationSletter meldinger ved

oppstartStøtte for

sagaerTransport

AsA_Client Nei Nei Ja Nei MSMQ

AsA_Server Ja Ja Nei Ja MSMQ

Page 33: Introduksjon til NServiceBus

• In-memory subscription storage:• Er default• Servere mister abonnementer ved restart• Kun for egnet ved utvikling/test!

Konfigurasjon - Subscription storage

Page 34: Introduksjon til NServiceBus

• MSMQ subscription storage storage:• Abonnementer lagres i en egen kø

Konfigurasjon - Subscription storage

Page 35: Introduksjon til NServiceBus

• DB subscription storage• Lagrer abonnementer i en database• NHibernate eller SQLite• Automatisk generering av schema• Bør brukes i produksjonsmiljøet

Konfigurasjon - Subscription storage

Page 36: Introduksjon til NServiceBus

• DB subscription storage eksempelkonfigurasjon:

Konfigurasjon - Subscription storage

Page 37: Introduksjon til NServiceBus

• For Generic Host• De innebygde profilene:

• Lite (default)• Integration• Production

Konfigurasjon - Profiler

Logging Subscription Saga persister Scale-out

Lite Mye (Console) In-memory In-memory Nei

Integration Mindre (Console) MSMQ SQLite Ja

Production Lite/Custom (Fil) DB NHibernate Ja

Page 38: Introduksjon til NServiceBus

Konfigurasjon - Velge profil

Page 39: Introduksjon til NServiceBus

• Implementere IProfile

Konfigurasjon - Lag din egen profil

Page 40: Introduksjon til NServiceBus

Konfigurasjon - Tilpasse en profil

Page 41: Introduksjon til NServiceBus

• Koordinerer ulike steg i en langtlevende, distribuert og persistent transaksjon

• Status lagres i en database

• Ligner på workflow• Men er ikke det samme• Er på et høyere nivå• Kan inneholde workflow og state machines

Sagaer

Page 42: Introduksjon til NServiceBus

• Definisjon av en saga:

Sagaer - Eksempel

Page 43: Introduksjon til NServiceBus

• Håndtering av en melding:

Sagaer - Eksempel (forts)

Page 44: Introduksjon til NServiceBus

• Kjøres som en egen service• Har sin egen kø• Brukes til å vekke til live sagaer som venter på en

melding for å forsette• Eksempel:

• En ordre som aldri blir godkjent• Kan feks sende påminnelse etter en uke

Sagaer - Timeout Manager

Page 45: Introduksjon til NServiceBus

• NServiceBus.Testing.Dll• Bruker Rhino.Mocks

Enhetstesting

Page 46: Introduksjon til NServiceBus

• Generic host• Timeout manager• Distibutor• Gateway• Proxy

NServiceBus prosesser

Page 47: Introduksjon til NServiceBus

Distributor - Load balancing

http://nservicebus.com

Page 48: Introduksjon til NServiceBus

Gateway

Page 49: Introduksjon til NServiceBus

Proxy

http://nservicebus.com

Page 50: Introduksjon til NServiceBus

Proxy

http://nservicebus.com

Page 51: Introduksjon til NServiceBus

• NServiceBus legger på egendefinert meldingshode• Kan skape problemer for eksterne konsumenter av MSMQ-køen

Interoperabilitet

Page 52: Introduksjon til NServiceBus

• Selve meldingen er en standard MSMQ melding

Interoperabilitet

Page 53: Introduksjon til NServiceBus

• Integrasjon via:• Egen NServiceBus service på BizTalk serveren

• Tar imot meldingen og sender den videre til BizTalk• MSMQ• Custom BizTalk Adapter for NServiceBus

BizTalk og NServiceBus

Page 54: Introduksjon til NServiceBus

• NServiceBus har:• Pub/sub støtte• Innebygd støtte for transaksjoner og feilhåndtering

• Kombinere WCF med NServiceBus• Bruk synkron og asynkron kommunikasjon alt etter hva som passer

WCF og NServiceBus

Page 55: Introduksjon til NServiceBus

• Blir støttet i neste versjon av NServiceBus• Kjøre NServiceBus innenfor i en Azure Worker Role• Azuere queues

• Max 8KB meldingsstørrelse• Kombinere med Azure Blob Storage for større meldinger

• Håndtering av transaksjoner• For integrasjon mot eksterne applikasjoner og partnere

Azure og NServiceBus

Page 56: Introduksjon til NServiceBus

• NServiceBus 2.1• Fokus på pluggbarhet• Støtte for Azure (fortsatt på et tidlig stadium)• Målsetning om å slippe en ny versjon hver 6. måned

Neste versjon

Page 57: Introduksjon til NServiceBus

• Deployment • Mye som må konfigureres

• Feilsøking av transaksjoner• DTCPing• NH Prof

• Oppfølging av feil i produksjonsmiljøet• Lage egne verktøy eller kjøpe?

• Krever forståelse for messaging og eventer hos utviklerene• Ikke undervurder kompleksiteten

• Vurder behovet for skalerbarhet• Antall samtidige brukere• Tilgjengelighet, responstider• Ingen golden hammer!

• Les kildekoden!

Tips og erfaringer

Page 58: Introduksjon til NServiceBus

Publish/subscribe demo

Page 59: Introduksjon til NServiceBus

• http://nservicebus.com• Udi Dahan sin blog: http://www.udidahan.com/• NServiceBus SVN trunk• Sagas vs. workflows• SOA vs. EAI vs. ESB• Integrating BizTalk Server and nServiceBus• Formell beskrivelse av Sagaer fra 1987• Hanselminutes Podcast 176 - NServiceBus with Udi

Dahan• Deep Fried Bytes Episode 49: Getting the Right Message

about NServiceBus with Udi Dahan

Referanser

Page 60: Introduksjon til NServiceBus

• NServiceBus tutorials• Eksempelprosjekter:

• ElegantCode Starbucks spike• NYC Alt.Net demo application• Azure integrasjon• Stockholm Alt.Net eksempel av Andreas Öhlund

• NServiceBus diskusjonsgruppe hos Yahoo Groups

Ressurser

Page 61: Introduksjon til NServiceBus

Spørsmål?