Introduksjontil NServiceBusNNUG 25.05.2010
Sverre HundeideSeniorkonsulentItera Consulting (tidligere Objectware)Twitter: @sverrehundeideBlog: http://sverrehundeide.blogspot.comObjectware har blitt Itera Consulting
Kort om messagingpatternsNServiceBus egenskaper og konfigurasjonDemoSpørsmål og diskusjonAgenda
UtvikletavUdiDahanAndreas ÖhlundogflerebidrarogsåGjortomtil Open Source i 2006Versjon 2.0: Mars 2010Historien til NServiceBus
Hvaeren “service bus”?
"The bus is a lie!"
Bus vs. BrokerBroker, "hub and spoke"
Bus vs. Broker
Bus vs. Broker"Busses rule, brokers drool"- Dru Sellers
Oppsummert: En service bus erDISTRIBUERT!
SkalerbarhetLøse koplingerInteroperabilitetRobusthetGenerelle messaging fordeler
Asynkronekommunikasjonstyper med messaging:Store and forward (send and forget)Send / Receive (Request / Response) Publish / SubscribeMessaging patterns støttet av NServiceBus
Store and forwardAsynkront:
Avsendertråden venter ikkeStore and forward - EksempelVenter ikke på bekreftelse på at eposten har blitt sendt.
Send / Receive (Request / Response)
Send / Receive - EksempelKlienten:
Send / Receive - EksempelServeren:
Send / Receive - EksempelKlienten – Håndteresvaret:
Send / Receive Hvorskalsvaretsendes?Informasjonomsvarkøliggerpå MSQM-meldingen (standard MSMQ funksjonalitet).
En tråd ligger og venter på svar og kjører callbackmetoden når svar kommer.Er ikke robustSend / Receive - Asynkonous callbacks
Publish / Subscribe
Publish / Subscribe
Publish / Subscribe - EksempelPublisher:Subscriptions gjøres til denne køen
Publish / Subscribe - EksempelSubscriber:
Publish / Subscribe - EksempelSubscriber:
Publish / Subscribe - EksempelNServiceBusvilsende en subscription melding vedoppstart:
Ved pub/sub publisereseventerIkkekommandoer (request meldinger)!Definerer en hendelseifortidEksempel:OrderStatusChangedEventer
NServiceBus.dllAlle interface ligger her, ingen implementasjonNServiceBus.Core.dllImplementasjon avrammeverketGenerert med ILMergeInneholder mange eksterneavhengigheter:NHibernate ogFluentNHibernate SpringUnntak: Log4Net, andreIoC-rammeverkenn SpringForenkler deploymentNServiceBus assemblies
NServiceBuskonfigurasjon
Konfigurasjon - Fluent API
Convention over configurationKonfigurasjon
ForenklerbrukenavNServiceBusBasertpåTopShelfKan enkeltinstalleressom en Windows ServiceDeployessammen med alletjenestersomskalmotta, sendeellerpubliseremeldingerKan ogsåbrukeNServiceBusuten Generic HostHåndterer “Profiler”Generic host
Marker interfaces somdefinerer default konfigurasjon:AsA_Client, AsA_Server, AsA_PublisherKonfigurasjonav Generic HostAsA_PublisherarverfraAsA_Server
AsA_Clientkanikkekombineres med AsA_PublisherDefault konfigurasjonsalternativer:Konfigurasjon av Generic HostTransaksjonellImpersonationSletter meldinger ved oppstartStøtte for sagaerTransportAsA_ClientNeiNeiJaNeiMSMQAsA_ServerJaJaNeiJaMSMQ
In-memory subscription storage:Er defaultServere mister abonnementerved restartKun for egnetvedutvikling/test!Konfigurasjon - Subscription storage
MSMQ subscription storage storage:Abonnementerlagresi en egenkøKonfigurasjon - Subscription storage
DB subscription storageLagrerabonnementeri en databaseNHibernate ellerSQLiteAutomatiskgenereringav schemaBørbrukesiproduksjonsmiljøetKonfigurasjon - Subscription storage
DB subscription storage eksempelkonfigurasjon:Konfigurasjon - Subscription storage
For Generic HostDe innebygdeprofilene:Lite (default)IntegrationProductionKonfigurasjon - Profiler LoggingSubscriptionSaga persisterScale-outLiteMye (Console)In-memoryIn-memoryNeiIntegrationMindre (Console)MSMQSQLiteJaProductionLite/Custom (Fil)DBNHibernateJa
Konfigurasjon - Velge profil
Implementere IProfileKonfigurasjon - Lag din egen profil
Konfigurasjon - Tilpasse en profil
Koordinererulikestegi en langtlevende, distribuertog persistent transaksjonStatus lagresi en databaseLignerpå workflowMen erikkedetsammeErpå et høyerenivåKan inneholde workflow og state machinesSagaer
Definisjon av en saga:Sagaer - Eksempel
Håndtering av en melding:Sagaer - Eksempel (forts)
Kjøressom en egen serviceHar sin egenkøBrukestil å vekketil live sagaersomventerpå en melding for å forsetteEksempel:En ordresomaldriblirgodkjentKan fekssendepåminnelseetter en ukeSagaer - Timeout Manager
NServiceBus.Testing.DllBrukerRhino.MocksEnhetstesting
Generic hostTimeout managerDistibutorGatewayProxyNServiceBus prosesser
Distributor - Load balancinghttp://nservicebus.com
Gateway
Proxyhttp://nservicebus.com
Proxyhttp://nservicebus.com
NServiceBusleggerpåegendefinertmeldingshodeKan skapeproblemer for eksternekonsumenterav MSMQ-køenInteroperabilitet
Selvemeldingener en standard MSMQ meldingInteroperabilitet
Integrasjon via:EgenNServiceBus service  på BizTalk serverenTar imotmeldingenog sender den videretil BizTalkMSMQCustom BizTalk Adapter for NServiceBusBizTalk og NServiceBus
NServiceBushar:Pub/sub støtteInnebygdstøtte for transaksjonerogfeilhåndteringKombinere WCF med NServiceBusBruksynkronogasynkronkommunikasjon alt etterhvasom passerWCF og NServiceBus
BlirstøttetinesteversjonavNServiceBusKjøreNServiceBusinnenfori en Azure Worker RoleAzuere queuesMax 8KB meldingsstørrelseKombinere med Azure Blob Storage for størremeldingerHåndteringavtransaksjonerFor integrasjon mot eksterneapplikasjonerogpartnereAzure og NServiceBus
NServiceBus 2.1FokuspåpluggbarhetStøtte for Azure (fortsattpå et tidlig stadium)Målsetningom å slippe en nyversjonhver 6. månedNeste versjon
Deployment MyesommåkonfigureresFeilsøkingavtransaksjonerDTCPingNH ProfOppfølgingavfeiliproduksjonsmiljøetLageegneverktøyellerkjøpe?Kreverforståelse for messaging ogeventerhosutviklereneIkkeundervurderkompleksitetenVurderbehovet for skalerbarhetAntallsamtidigebrukereTilgjengelighet, responstiderIngen golden hammer!Les kildekoden!Tips og erfaringer
Publish/subscribe demo
http://nservicebus.comUdiDahan sin blog: http://www.udidahan.com/NServiceBus SVN trunkSagas vs. workflowsSOA vs. EAI vs. ESBIntegrating BizTalk Server and nServiceBusFormellbeskrivelseavSagaerfra 1987Hanselminutes Podcast 176 - NServiceBus with UdiDahanDeep Fried Bytes Episode 49: Getting the Right Message about NServiceBus with UdiDahanReferanser

Introduksjon til NServiceBus

Editor's Notes

  • #3  Erfaringer med NServiceBus
  • #33  MÅ ikke bruke Generic Host, men Generic Host gjør det enklere å komme i gang med NServiceBus
  • #48 IBus: Alle metoder har en tilsvarende Expect… metode i testbiblioteket
  • #56 Biztalk kan ha mange ulike roller: Mottaker, avsender, subscriber, publisher