introduksjon til nservicebus
DESCRIPTION
TRANSCRIPT
Introduksjon til NServiceBusNNUG 25.05.2010
Sverre HundeideSeniorkonsulentItera Consulting (tidligere Objectware)Twitter: @sverrehundeideBlog: http://sverrehundeide.blogspot.com
Objectware har blitt Itera Consulting
• Kort om messaging patterns• NServiceBus egenskaper og konfigurasjon• Demo• Spørsmål og diskusjon
Agenda
• 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
Bus vs. Broker
Broker, "hub and spoke"
Bus vs. Broker
Bus vs. Broker
"Busses rule, brokers drool"- Dru Sellers
Oppsummert: En service bus er
DISTRIBUERT!
• Skalerbarhet• Løse koplinger• Interoperabilitet• Robusthet
Generelle messaging fordeler
• Asynkrone kommunikasjonstyper med messaging:• Store and forward (send and forget)• Send / Receive (Request / Response) • Publish / Subscribe
Messaging patterns støttet av NServiceBus
Store and forward
• Asynkront:o Avsendertråden venter ikke
Store and forward - Eksempel
Venter ikke på bekreftelse på at eposten har blitt sendt.
Send / Receive (Request / Response)
Send / Receive - Eksempel
Klienten:
Send / Receive - Eksempel
Serveren:
Send / Receive - Eksempel
Klienten – Håndtere svaret:
Send / Receive
Hvor skal svaret sendes?
Informasjon om svarkø ligger på MSQM-meldingen (standard MSMQ funksjonalitet).
• En tråd ligger og venter på svar og kjører callbackmetoden når svar kommer.
• Er ikke robust
Send / Receive - Asynkonous callbacks
Publish / Subscribe
Publish / Subscribe
Publish / Subscribe - Eksempel
Publisher:
Subscriptions gjøres til denne køen
Publish / Subscribe - Eksempel
Subscriber:
Publish / Subscribe - Eksempel
Subscriber:
Publish / Subscribe - Eksempel
NServiceBus vil sende en subscription melding ved oppstart:
• Ved pub/sub publiseres eventer• Ikke kommandoer (request meldinger)!
• Definerer en hendelse i fortid• Eksempel:
• OrderStatusChanged
Eventer
• 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
NServiceBus konfigurasjon
Konfigurasjon - Fluent API
• Convention over configuration
Konfigurasjon
• 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
• 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
• 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
• In-memory subscription storage:• Er default• Servere mister abonnementer ved restart• Kun for egnet ved utvikling/test!
Konfigurasjon - Subscription storage
• MSMQ subscription storage storage:• Abonnementer lagres i en egen kø
Konfigurasjon - Subscription storage
• DB subscription storage• Lagrer abonnementer i en database• NHibernate eller SQLite• Automatisk generering av schema• Bør brukes i produksjonsmiljøet
Konfigurasjon - Subscription storage
• DB subscription storage eksempelkonfigurasjon:
Konfigurasjon - Subscription storage
• 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
Konfigurasjon - Velge profil
• Implementere IProfile
Konfigurasjon - Lag din egen profil
Konfigurasjon - Tilpasse en profil
• 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
• Definisjon av en saga:
Sagaer - Eksempel
• Håndtering av en melding:
Sagaer - Eksempel (forts)
• 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
• NServiceBus.Testing.Dll• Bruker Rhino.Mocks
Enhetstesting
• Generic host• Timeout manager• Distibutor• Gateway• Proxy
NServiceBus prosesser
Distributor - Load balancing
http://nservicebus.com
Gateway
Proxy
http://nservicebus.com
Proxy
http://nservicebus.com
• NServiceBus legger på egendefinert meldingshode• Kan skape problemer for eksterne konsumenter av MSMQ-køen
Interoperabilitet
• Selve meldingen er en standard MSMQ melding
Interoperabilitet
• 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
• 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
• 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
• 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
• 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
Publish/subscribe demo
• 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
• 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
Spørsmål?