introduksjon til nservicebus

Post on 05-Dec-2014

2.606 Views

Category:

Technology

5 Downloads

Preview:

Click to see full reader

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?

top related