One in a series of posts giving a quick overview of ESB libraries for .NET

Originally an open-source library developed by Udi Dahan, the licensing was changed after version 2 to put it on a more commercial footing, and the software is now developed and supported by Udi’s company – Particular Software. The source code remains on Github.

NServiceBus is a tried and tested library. It has grown a lot since it's humble beginnings and now is once part of a suite of tools and libraries for building distributed applications. It's no surprise that Udi Dahan just happens to be highly regarded as an expert in distributed software architecture.

https://docs.particular.net/nservicebus/messaging/publish-subscribe/publish-handle-event

Messages

Messages need to either implement a marker interface or use defined conventions.

namespace Domain.Messages
{
  public class UserCreatedEvent : IEvent
  {
    public string Name { get; set; }
  }
}

Or

var conventions = endpointConfiguration.Conventions();

conventions.DefiningEventsAs(
 type =>

     {
       return type.Namespace == "MyNamespace.Messages.Events";
 });

Publishing

You can publish an event from within another handler or when you create an endpoint. This example shows publishing an event from an endpoint:

var endpointInstance = await Endpoint.Start(endpointConfiguration)
    .ConfigureAwait(false);
    await endpointInstance.Publish(new MyEvent())
      .ConfigureAwait(false);

Subscribing

To handle an event, implement IHandleMessages<T>

public class UserCreatedHandler : IHandleMessages<UserCreatedEvent>
{
  public Task Handle(UserCreatedEvent message, IMessageHandlerContext context)
  { … }
}

NServiceBus will automatically locate handlers by looking for implementations of IHandleMessages<T>