er ingen gåde... 29. august 2012 @ ANUG Mogens Heller Grabe

Relaterede dokumenter
Distribuerede systemer og messaging med Rebus. AANUG Developer Conference september 2013

F# - hvorfor, hvordan og til hvad? Rune Ibsen Jyske Bank

Vejledning Installation af SonWin Server CustomerService Flows

Navision Stat (NS 9.2)

Tredjepart webservices

Spring Beans. Traditionelle Spring Beans <bean id="espressoservice" class="it.bezzera.bz07p"/> Spring custom beans <si:channel id="orders"/>

Fra idé til virkelig med Azure Mobile Services

Databaseadgang fra Java

Digitaliseringsstyrelsen

OFFENTLIGT KMD A/S EJ 0.0 NUMMERERET SLIDE 1 CCM USER GROUP KMD einvoicing. v/ Ole Sixhøi

Spring Schema Extension eller Spring Domain Specific Languages

Spectrum Spatial Analyst WebGIS. Peter Horsbøll Møller GIS Pre-Sales Specialist 10. september 2014

SWC Elementer i klassedefinition

Oracle8i R8.1.5 JAVA. Oracle8i R Oracle8i Enterprise Edition Oracle8i R Oracle8i R Oracle8i R8.1.

Tildel fast IP adresse til BC9xx0 via System Manageren

Navision Stat 7.x. GIS WS, opgavekø og automatiseret filindlæsning via NAS. Overblik. Side 1 af 9. ØSY/CPS/MIL Opr

PID2000 Archive Service

Nemhandel infrastruktur. Morten Hougesen Christian Uldall Pedersen 8. April 2010

.NET 3.5 og C# 3.0. Denne artikel viser hvordan man kan bruge nogle af de nye features i.net 3.5 og C# 3.0. Det er ikke en komplet oversigt.

SIMS integration med Microsoft Active Directory, er implementeret, via en mellemdatabase.

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

Navision Stat 7.x. Opsætning af NAS 1 til afvikling af GIS-automatisering, GIS med webservice og opgavekø. Overblik. Side 1 af 8

SYSTEMDOKUMENTATION AF POC

IP Telefoni. Modul 3

CVS som KS-værktøj E Branching, Merging m.v.

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

Indhold. Senest opdateret:03. september Side 1 af 8

Arkitektur principper og design mønstre til realisering af enterprise applikationer baseret på rige domænemodeller (og.net)

Installation af web-konfigurationsprogrammer

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

FLIS PORTAL GENNEMGANG OG STIKPRØVER (SEPTEMBER 2015)

Introduktion til NAnt

Agenda. Exchange 2010 Client Access Server arkitektur. Outlook Web App (OWA) Office Outlook Outlook Mobile (EAS) Outlook Voice Access (OVA)

Virkefeltsregler i Java

Modern Concurrency Abstractions for C#

En textbox har et Validating event, med dette kan vi samme med en errroprovider checke input:

-Dag juni kl inspiration & networking

Curriculum Vitae Jack Petersen

Speciale. Evaluering af Java til udvikling af indlejrede realtidssystemer ved brug af en eksisterende Java Optimized Processor (JOP)

Program Dokumentation PC Software Skrevet af. Gruppen. Version 1.0

Delphi og Databaser for begyndere

Pronestor Room & Catering

SIMS Active Directory Service 2.5 Quick Guide

Undtagelseshåndtering i C#

Introduktion til versionsstyring

Generelt gælder det at SQL serveren skal understøtte SQL Authentication (Mixed mode) da SIMS Serveren kommunikerer gennem en SQL bruger.

SAP R/3. Henrik Kroos

NemHandel infrastruktur. Lars Houe Heinrich Clausen 4. November 2010

The server successfully processed the request and is not returning any content.

Præsentation af BSK regionens identity and access management platform

Vejledning til validator test af metadata

DAXIF# - Delegate Automated Xrm Installation Framework. Delegate A/S

.NET 4.0 og C# 4.0. Denne artikel beskriver nogle af de nye features i.net 4.0 og C# 4.0. Den forudsætter et vist kendskab til.net og C#.

Singleton pattern i C#

Indhold. Senest opdateret : 30. juli Side 1 af 5

IBM WebSphere Operational Decision Management. Decision Server Events

Model Drevet Design i Praksis

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.

Tech College Aalborg. ASP.NET Hjemmeside. Projekt Smart Zenior Home - Guide til ASP.NET hjemmeside med Visual Studio

Agenda. Muligheder for anvendelse. Komponenter. Features. Restore muligheder. DR og TSM integration. Repository. Demo. Spørgsmål

OIOSAML.NET og Umbraco. ved Thomas Ravnholt silverbullet.dk

Delphi - CrackMe og Keygen

Development environments made easy

.NET 4.5 og C# 5.0. Denne artikel beskriver nogle af de nye features i.net 4.5 og C# 5.0. Den forudsætter et vist kendskab til.net og C#.

Kursusgang 11. Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing

Handler du med råvarer, finansielle produkter og valuta?

Introduktion til AOP i C#

LaserNet v6.6 Release Nyhedsbrev

Om binære søgetræer i Java

Kursusarbejde 2 Grundlæggende Programmering

Dokumentering af umbraco artikeleksport:

3CX Phone System. Introduktion til 3CX Phone System. Copyright 2002 ACNielsen a VNU company.

Intro Denne vejledning beskriver proceduren for at opdatere en kørende UMS version til seneste version.

Computer Networks Specielt om Infrastrukturer og Teknologi

Debugging ivs. Praksis eksempel. Assemblies Attributes Dynamic programming. Github. Multithreading. Grundlæggende programmering Lektion 6

Udvikling af DOTNET applikationer til MicroStation i C#

Tildel fast IP adresse til BC9xxx med BootP og oprettelse kommunikation fra TwinCat

DATO DOKUMENT SAGSBEHANDLER MAIL TELEFON

Perspektiverende Datalogi Internetalgoritmer. MapReduce. Gerth Stølting Brodal

Java Klasse nedarvninger

System & Metode ApS præsenterer. En effektiv dokumentportal

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

Kreditrisikomodellering med SAS Risk Management for Banking

Test med NUnit. Denne artikel introducerer NUnit. Den forklarer ideen med NUnit. Og den viser hvordan man konkret bruger det.

Automatiseret Test & Continuous Integration. Rikke Simonsen & Mads Danquah

Navision Stat 7.0. GIS Webservice og automatiseret filindlæsning via NST. Overblik. Side 1 af 9. ØSY/CRA/MAC Opr

HELLO INSTALLATIONS GUIDE - DANSK RACKPEOPLE

Microsoft Dynamics CRM 2013

ISA Server 2006 Del 5. Jesper Hanno Hansen

NemRefusion VSLight Integrationsvejledning

Kursusarbejde 3 Grundlæggende Programmering

Affaldsdatasystem Vejledning supplement i system-til-system integration for.net brugere

Ivan Overgaard 11/29/2012

Vejledning til listings-pakken

Servlets, Tomcat & BlueJ

PROGRAM. using System; using System.Collections.Generic; using System.Text; using System.Collections;

Exchange-/Google-kalender integration

Sikre apps på ios og Android. Mads Jensen & Søren

IP Telefoni. IP telefoni introduktion. TDC IP telefoni Scale

Transkript:

er ingen gåde... 29. august 2012 @ ANUG Mogens Heller Grabe

Agenda! Hvad er dit problem?! Hvordan kan det løses?! Rebus!!! Slides!!+ snak!!+ kode!

Mogens Heller Grabe!!!! mhg@d60.dk! @mookid8000! http://mookid.dk/oncode!

Hvad er dit problem?!

For eksempel:! public class Køb : FinansielTransaktion { public void Bogfør() { // (...) foreach(var d in Pantebrev.Debitorer) { d.tilmeldtilcprmatch(); d.inhentkreditstatus(); } foreach(var k in Pantebrev.Kauti(...) }

Long-lived transactions...!

begin tran! DoThis()! DoThat()! commit tran!

begin tran! DoThis()! commit tran! begin tran!?! DoThat()! commit tran!

Async Reliable Messaging!

Messaging!

Reliable!

Async!

Windows FTW!!!!11!

Hvad er så det der service bus for noget?!

Køkultur!

Request/reply!

Publish/subscribe!

Process manager!

NServiceBus!

MassTransit Rhino Service Bus!

hmmm...!

Rebus! Første mål:! Request/reply + publish/subscribe! Lavet efter NServiceBus-modellen! Bedre fejlbeskeder!

~ 400 linjer!!!

Simpel og intuitiv konfigurationshistorie!

Få, velvalgte features!

Ingen doodleware!

Rebus Core kun afhængig af.net 4 BCL!

Integration m. 3.partslibs via små, fokuserede assemblies!

De bedste fejlbeskeder!

Lav friktion!

Rebus! Version 0.19.6! Ikke længere ~ 400 linjer!!!=> 1.0!!

Rebus! Apache License v. 2! Kode på GitHub: http://github.com/mookid8000/rebus!

Contributors!

Rebus! install-package rebus pre! evt. via! rebus.castle.windsor! rebus.structuremap! rebus.mongodb! rebus.ravendb! rebus.log4net! (...)!

Eksempel! Lillebitte kommunikation mlm. 2 processer!

Message! public class DoStuff { public DoStuff(string whattodo) { } WhatToDo = whattodo; } public string WhatToDo { get; private set; }

Handler! public class DoStuffHandler : IHandleMessages<DoStuff> { } public void Handle(DoStuff message) { } // go ahead and do the stuff...

Konfiguration! new RebusBus(...whoa!!)

Konfiguration! var a = new FaveContainerAdapter(container); Configure.With(a).Logging(l => l.log4net()).transport(t => t.usemsmq( input, error )).DetermineDestination(d => d.(...).createbus().start();

Konfiguration! var busforeverydayuse = container.resolve<ibus>(); var busforcertainadvancedtasks = container.resolve<iadvancedbus>(); var messagecontext = container.resolve<imessagecontext>()

Den rigtige måde! // lav konfigurationstryl med // Configure.With(containerAdapter)... // og så: public class HomeController : Controller { public HomeController(IBus bus) {...} } //... osv!

Eksempel! Et vaskeægte (kunstigt) integrationsscenarie!

Sagde han saga?!

Process manager!

Saga! public class IntegrationSaga : Saga<IntegrationSagaData>, { } IAmInitiatedBy<SomethingHappened>, IHandleMessages<VerifyComplete> public void Handle(SomethingHappened m) {...} public void Handle(VerifyComplete m) {...}

Saga! IntegrationSaga: public override void ConfigureHowToFindSaga() { Incoming<SomethingHappened>(s => s.id).correlateswith(d => d.idofevent); } Incoming<VerifyComplete>(s => s.corrid).correlateswith(d => d.corrid);

Saga! IntegrationSaga: public void Handle(SomethingHappened m) { bus.send(new DoIntegrate(...)); } bus.defer(timespan.fromminutes(2), new VerifyComplete(corrId));

Eksempel! Et vaskeægte (lidt mere ægte) integrationsscenarie!

Rebus venner! containers! Autofac! StructureMap! Castle Windsor! Unity! Ninject!

Rebus venner! logging! Log4net! NLog!

Rebus venner! persistence! SQL Server! MongoDB! RavenDB! XML J!

Rebus venner! transport! MSMQ! RabbitMQ(*)! AzureMQ(*)! (*) umodne!

Rebus venner! ofte inviteret til festen! Topshelf!

Extensibility! Grundlæggende! ISendMessages! IReceiveMessages! IActivateHandlers! IDetermineDestination! ISerializeMessages! IStoreSubscriptions! IStoreSagaData! IInspectHandlerPipeline! IErrorTracker!

Extensibility! Supplerende! IAdvancedBus! BeforeTransportMessage(bus, message)! AfterTransportMessage(bus, ex, message)! BeforeMessage(bus, message)! AfterMessage(bus, ex, message)! MessageSent(bus, dest, message)! PoisonMessage(bus, message)!

Hvad nu?! Battle-hardening! Distributør! Gateway! (+ det løse)!

https://github.com/mookid8000/rebus/wiki!

Tak for opmærksomheden!! Mogens Heller Grabe!!!! mhg@d60.dk! @mookid8000! http://mookid.dk/oncode!

Image credits! Lyserød pistol: http://www.desantisholster.com/desantis-blog/girl-meets-gun! Plastikkæder: http://www.stanchionwholesaler.com/products/chain/mc_000! Trollface: http://www.thebuzzmedia.com/troll-face-high-resolution/! Eat SOAP: http://narwhaler.com/img/b7/h/eat-soap-b7hc4r.jpg! Just soap: http://kinlane-productions.s3.amazonaws.com/api-evangelist/soap.gif!