Skip to content

Instantly share code, notes, and snippets.

@WolfyUK
Last active April 24, 2018 08:25
Show Gist options
  • Save WolfyUK/e17b5f36c6c57089a9df026cbbcb058a to your computer and use it in GitHub Desktop.
Save WolfyUK/e17b5f36c6c57089a9df026cbbcb058a to your computer and use it in GitHub Desktop.
NServiceBus Heartbeat
using System;
using NServiceBus;
namespace Heartbeat.Contracts
{
public class TestCommand : ICommand
{
public DateTime Now { get; set; }
}
}
using Heartbeat.Contracts;
using NServiceBus;
using System;
using System.Threading.Tasks;
namespace Heartbeat.Publisher
{
public class Program
{
public static string EndpointName => "Heartbeat.Publisher";
static async Task Main()
{
Console.Title = EndpointName;
// transport & persistence
var endpointConfiguration = new EndpointConfiguration(EndpointName);
var persistence = endpointConfiguration.UsePersistence<InMemoryPersistence>();
var transport = endpointConfiguration.UseTransport<MsmqTransport>();
// audit & error queues
endpointConfiguration.SendFailedMessagesTo("error");
endpointConfiguration.AuditProcessedMessagesTo("audit");
// heartbeat
endpointConfiguration.UniquelyIdentifyRunningInstance().UsingNames(EndpointName, Environment.MachineName);
endpointConfiguration.SendHeartbeatTo(serviceControlQueue: "particular.servicecontrol", frequency: TimeSpan.FromSeconds(15), timeToLive: TimeSpan.FromSeconds(30));
// metrics
var metrics = endpointConfiguration.EnableMetrics();
metrics.SendMetricDataToServiceControl(serviceControlMetricsAddress: "particular.monitoring", interval: TimeSpan.FromSeconds(10), instanceId: EndpointName);
endpointConfiguration.UniquelyIdentifyRunningInstance().UsingNames(EndpointName, Environment.MachineName);
// routing
var routing = transport.Routing();
routing.RouteToEndpoint(typeof(TestCommand), "Heartbeat.Subscriber");
// start endpoint & send message
var endpointInstance = await Endpoint.Start(endpointConfiguration).ConfigureAwait(false);
await endpointInstance.Send<TestCommand>(c => { c.Now = DateTime.Now; }).ConfigureAwait(false);
// shutdown endpoint
var tcs = new TaskCompletionSource<object>();
Console.CancelKeyPress += (sender, e) => { tcs.SetResult(null); };
await tcs.Task;
await endpointInstance.Stop().ConfigureAwait(false);
}
}
}
using NServiceBus;
using System;
using System.Threading.Tasks;
namespace Heartbeat.Subscriber
{
public class Program
{
public static string EndpointName => "Heartbeat.Subscriber";
static async Task Main()
{
Console.Title = EndpointName;
// transport & persistence
var endpointConfiguration = new EndpointConfiguration(EndpointName);
var persistence = endpointConfiguration.UsePersistence<InMemoryPersistence>();
var transport = endpointConfiguration.UseTransport<MsmqTransport>();
// audit & error queues
endpointConfiguration.SendFailedMessagesTo("error");
endpointConfiguration.AuditProcessedMessagesTo("audit");
// heartbeat
endpointConfiguration.UniquelyIdentifyRunningInstance().UsingNames(EndpointName, Environment.MachineName);
endpointConfiguration.SendHeartbeatTo(serviceControlQueue: "particular.servicecontrol", frequency: TimeSpan.FromSeconds(15), timeToLive: TimeSpan.FromSeconds(30));
// metrics
var metrics = endpointConfiguration.EnableMetrics();
metrics.SendMetricDataToServiceControl(serviceControlMetricsAddress: "particular.monitoring", interval: TimeSpan.FromSeconds(10), instanceId: EndpointName);
endpointConfiguration.UniquelyIdentifyRunningInstance().UsingNames(EndpointName, Environment.MachineName);
// start endpoint
var endpointInstance = await Endpoint.Start(endpointConfiguration).ConfigureAwait(false);
// shutdown endpoint
var tcs = new TaskCompletionSource<object>();
Console.CancelKeyPress += (sender, e) => { tcs.SetResult(null); };
await tcs.Task;
await endpointInstance.Stop().ConfigureAwait(false);
}
}
}
using System.Threading.Tasks;
using Heartbeat.Contracts;
using NServiceBus;
using NServiceBus.Logging;
public class TestCommandHandler : IHandleMessages<TestCommand>
{
static ILog log = LogManager.GetLogger<TestCommandHandler>();
public Task Handle(TestCommand message, IMessageHandlerContext context)
{
log.Info($"Received message {message.Now}");
return Task.CompletedTask;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment