3. Agenda
• What
is
messaging
• Doing
it
with
NServiceBus
• Enter
the
saga
4. What
is
messaging?
void
CreatePresentation(string
name);
-‐-‐
someObject.CreatePresentation(“Ride
The
Bus!”);
5. What
is
messaging?
• Networks
are
unreliable
• Inter-‐process
communicaKon
is
dead
slow
• The
other
process
might
not
be
there
at
the
moment
• etc
• etc
6. What
is
messaging?
void
CreatePresentation(CreatePresentationArgs
args);
-‐-‐
var
args
=
new
CreatePresentationArgs
{
Title
=
“Ride
The
Bus!”
};
someObject.CreatePresentation(args);
7. What
is
messaging?
void
Process(Args
args);
-‐-‐
someObject.Process(new
CreatePresentation
{
Title
=
“Ride
The
Bus!”
});
someObject.Process(new
Something());
someObject.Process(new
SomethingElse());
11. MSMQ
can
do
that!
• Ships
with
all
modern
versions
of
Windows
• Your
MSMQ
endpoint
is
always
local
–
remoKng
is
taken
care
of
via
outgoing
queues
• .NET
client
in
System.Messaging
(GAC).
15. • Each
service
has
its
own
input
queue.
• When
a
service
needs
to
send
a
message,
the
bus
looks
up
the
desKnaKon
somehow.
• How
desKnaKons
are
looked
up
depends
on
whether
the
service
is
sending
or
publishing.
26. Show
me
the
code
• Now
let’s
see
how
“Request/reply”
looks
with
NServiceBus
– We
have
a
pre8y
unreliable
web
service,
umm
“Whatchamacallit”,
that
we
want
to
call.
– We
build
an
integraKon
service
with
NServiceBus
that
works
as
a
messaging
façade
towards
the
web
service.
– Our
system
requests
stuff
from
the
façade,
the
façade
replies.
27. Show
me
the
code
• Now,
let’s
see
an
example
with
some
Pub/sub
acKon
– We
have
a
service
that
processes
something,
“Somekindofprocessor”,
when
it
receives
a
ProcessSomething
command.
– In
order
to
process
stuff,
it
needs
to
get
the
important
string
from
our
unreliable
web
service
from
before.
– When
processing
is
done,
it
should
publish
the
result,
allowing
any
other
interested
services
to
react
to
this.
30. The
real
world
is
a
place...
• ...where
we
can’t
always
process
messages
in
a
stateless
manner
like
this...
• ...where
mulKple
things
need
coordinaKon
and
will
not
always
succeed/fail
as
a
whole...
31. Enter
the
saga!
• A
model
for
long-‐lived
transacKons.
• “A
long-‐lived
transacKon
is
a
saga
if
it
can
be
wri8en
as
a
sequence
of
transacKons
that
can
be
interleaved
with
other
transacKons.”
• For
some
reason,
Mike
Amundsen
keeps
a
copy
of
the
original
whitepaper
PDF
here:
h8p://www.amundsen.com/downloads/sagas.pdf
32. Sagas
• Implemented
with
an
implementaKon
of
ISagaEntity,
TEntity
and
deriving
a
message
handler
from
Saga<TEntity>.
• All
handled
messages
should
somehow
be
correlated
with
the
sata
data.
36. Image
credits
“It’s
the
same
mouth,
just
flipped”:
h8p://humor-‐image.com/its-‐the-‐same-‐mouth-‐just-‐flipped/
Thanks
for
lepng
me
borrow
your
awesome
images
–
if
you
ever
meet
me,
I’ll
buy
you
guys
and
girls
a
beer.
Seriously,
I
will.