Implementing A Service Bus With Masstransit: Roland Guijt
Implementing A Service Bus With Masstransit: Roland Guijt
with MassTransit
Roland Guijt
INDEPENDENT SOFTWARE DEVELOPER AND TRAINER
@rolandguijt www.rmgsolutions.nl
Sending and receiving
Module Service bus concepts
Overview Type support
Scheduling
Monitoring
Dependency Injection
Failure
Request/Response
Service Bus Framework for .NET
Endpoints and queues
Not like Biztalk
Gateway to transport
Multiple transports
Optimized for testing
Built-in features
Service Bus vs Native Transport API
Exchange
Queue 1
For queue 1
Exchange Exchange
Queue 2
Message type For queue 2
Exchange
Queue 3
For queue 2
Delivery of messages at a later time
Scheduling Quartz.net
cfg.UseMessageScheduler(new Uri(“rabbitmq://localhost/quartz”));
or
cfg.UseInMemoryMessageScheduler();
Observer IReceiveObserver
Interfaces IConsumeObserver
IConsumeMessageObserver<T>
ISendObserver
IPublishObserver
Message Observers in Code
public interface ISendObserver
bus.ConnectSendObserver(observer);
Observes bus activities
bus.EnablePerformanceCounters();
Avoid using bus object
Extra NuGet package
Dependency Adds extension methods to
Injection IReceiveEndpointConfigurator
Autofac, Ninject, StructureMap, Unity,
Castle Windsor
Dependency Injection in Code
//create container
//register consumers
cfg.ReceiveEndpoint(“queuename”, e =>
{
e.LoadFrom(container);
or
e.Consumer<ConsumerType>(container);
}
Connection management
Skipped queue
Responding Retries
to Failure
Error queue
Fault<T> message
Happy Flow
Producer Queue
queue_skipped
Consumer Problem
Retry
policy
Fault<T>
message queue_error
How to Specify Fault and Response Addresses
context.Publish<IOrderRegisteredEvent>(orderRegisteredEvent,
c => c.FaultAddress = urlToEndpoint);
context.Publish<IOrderRegisteredEvent>(orderRegisteredEvent,
c => c.ResponseAddress = urlToEndpoint);
How to Set a Retry Policy
Except Selected
All Filter
Retry Policies
Immediate Intervals
Exponential Incremental
Producer waits until consumer replies
Against asynchronous nature of
Request/ Microservices
Response Supported with MessageRequestClient
Awaitable
Request/Response in Code