Now that we have a service endpoint to host our code, we will create a message handler within the endpoint that will process our message when it arrives:
Add a new class called
UserCreator.cs
to the service.Add three namespaces to the
using
block of the class file:using NServiceBus; using NServiceBus.Logging; using UserService.Messages.Commands;
Mark the class as
public
.Implement
IHandleMessages<CreateNewUserCmd>
.Implement the interface using Visual Studio's tools. This will generate a
Handle(CreateNewUserCmd message)
stub method.
Normally, we would want to create the user here with calls to a database. In order to keep the examples straightforward, we will skip the details of database access and just demonstrate what will happen by logging a message.
With NServiceBus, you can use any logging framework you like without being dependent upon that framework. NServiceBus internally includes a logging system that logs to both console and file, with an API that looks very much like log4net (previous versions of NServiceBus actually used the log4net framework directly). In Chapter 7, Advanced Configuration, you will learn how to easily swap these out for the real log4net
framework, NLog
framework, or implement an adapter for any logger we like. For now, we are more than content with the built-in logging implementation via the NServiceBus.Logging
namespace.
Now lets finish our fake implementation for the handler:
Above the
Handle
method, add an instance of a logger:private static readonly ILog log = LogManager.GetLogger(typeof(UserCreator));
To handle the command, remove
NotImplementedException
and replace it with the following statement:log.InfoFormat("Creating user '{0}' with email '{1}'",message.Name,message.EmailAddress);
When you're done, your class should look like this:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using UserService.Messages.Commands; using NServiceBus; namespace UserService { public class UserCreator : IHandleMessages<CreateNewUserCmd> { private static readonly ILog log = LogManager.GetLogger(typeof(UserCreator)); public void Handle(CreateNewUserCmd message) { log.InfoFormat("Creating user '{0}' with email '{1}'", message.Name, message.EmailAddress); } } }
Now we have a command message and a service endpoint to handle it. Its okay if you don't understand quite how all of this connects yet. Next, we need to create a way to send the command.
Tip
Downloading the example code
You can download the example code files for all Packt books you have purchased from your account at http://www.packtpub.com. If you purchased this book elsewhere, you can visit http://www.packtpub.com/support and register to have the files e-mailed directly to you.