Skip to content

Instantly share code, notes, and snippets.

View ramonsmits's full-sized avatar

Ramon Smits ramonsmits

View GitHub Profile
@ramonsmits
ramonsmits / LogIncomingMessageId.cs
Created May 10, 2021 12:06
NServiceBus - Debug Log every incoming logical message ID
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Threading.Tasks;
using NServiceBus.Features;
using NServiceBus.Logging;
using NServiceBus.Pipeline;
class LogIncomingMessageId : Feature
{
@ramonsmits
ramonsmits / LogIncomingServiceControlRetry.cs
Created May 10, 2021 11:51
NServiceBus - Log incoming message its message ID and ServiceControl retry ID if the incoming messages is a SC retry
using System;
using System.Threading.Tasks;
using NServiceBus.Features;
using NServiceBus.Logging;
using NServiceBus.Pipeline;
class LogIncomingServiceControlRetry : Feature
{
static readonly ILog Log = LogManager.GetLogger<LogIncomingServiceControlRetry>();
@ramonsmits
ramonsmits / LogDuplicateMessageId.cs
Created May 4, 2021 16:45
NServiceBus behavior that
//
// endpointConfiguration.Pipeline.Register(new LogDuplicateMessageId(),nameof(LogDuplicateMessageId));
//
// NOTE: DOES NOT RELEASE MEMORY. Dictionary will grow indefinitely. ONLY FOR TESTING!
//
class LogDuplicateMessageId : IBehavior<IIncomingPhysicalMessageContext, IIncomingPhysicalMessageContext>
{
static readonly BlockingCollection<string> Logs = new BlockingCollection<string>();
static LogMessageId()
@ramonsmits
ramonsmits / AsyncConsoleLogger.cs
Last active April 28, 2021 15:48
Simple async console logger to prevent console IO to be the bottleneck when logging massive amounts of log entries on a short duration
// MIT , Inspired by https://softwareengineering.stackexchange.com/questions/149346/logging-asynchronously-how-should-it-be-done
using System;
using System.Collections.Concurrent;
using System.Threading.Tasks;
class AsyncConsoleLogger
{
static readonly BlockingCollection<string> Logs = new BlockingCollection<string>();
static AsyncConsoleLogger()
@ramonsmits
ramonsmits / ExtendLoggerScopeWithMessageData.cs
Last active September 2, 2021 14:27
NServiceBus - Add incoming message properties to the Microsoft Logging logger scope
//
// endpointConfiguration.RegisterComponents(c=>c.ConfigureComponent<ExtendLoggerScopeWithMessageData>(DependencyLifecycle.SingleInstance));
// endpointConfiguration.Pipeline.Register(b=>b.Build<ExtendLoggerScopeWithMessageData>(),nameof(ExtendLoggerScopeWithMessageData));
//
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using NServiceBus;
using NServiceBus.Pipeline;
using Microsoft.Extensions.Logging;
@ramonsmits
ramonsmits / CreateMD5.cs
Last active March 11, 2022 13:23
NServiceBus 7 - Replace StackTrace text with its MD5 value and only write the StackTrace to the log if the MD5 wasn't generated during the endpoint lifetime
// Source: https://stackoverflow.com/a/24031467/199551
public static string CreateMD5(string input)
{
// Use input string to calculate MD5 hash
using (var md5 = System.Security.Cryptography.MD5.Create())
{
var inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
var hashBytes = md5.ComputeHash(inputBytes);
// Convert the byte array to hexadecimal string
@ramonsmits
ramonsmits / Truncate.cs
Last active December 10, 2023 11:20
string.Truncate extension method that if longer than the specific maximum truncates the string and adds `…` character (tree dots)
static class StringExt
{
public static string? Truncate(this string? value, int maxLength)
{
if (value == null) return value;
return value.Length <= maxLength ? value : string.Concat(value.AsSpan(0, maxLength - 1), "…");
}
}
public static class ObjectExtension
{
public static T Do<T>(this T instance, Action<T> x)
{
x?.Invoke(instance);
return instance;
}
}
@ramonsmits
ramonsmits / Shovel.cs
Last active July 4, 2023 16:09
Simple messaging bridge forwarder acting as a shovel between different NServiceBus transports using NServiceBus 8.x with NServiceBus.Raw 4.x
using NServiceBus;
using NServiceBus.Logging;
using NServiceBus.Raw;
using NServiceBus.Routing;
using NServiceBus.Transport;
CancellationTokenSource cts = new();
Console.CancelKeyPress += (s, ea) =>
{
ea.Cancel = true;
@ramonsmits
ramonsmits / CancellationTimeoutBehavior.cs
Last active February 9, 2021 05:53
NServiceBus 7 behavior that adds a cancellation token to the context which can be retrieved by handler
//
// NServiceBus v8 will have improved support for cooperative cancellation.
//
// Register behavior:
//
// endpointConfiguration.Pipeline.Register(new CancellationTimeoutBehavior(TimeSpan.FromSeconds(5)), nameof(CancellationTimeoutBehavior));
//
using System;
using System.Threading;
using System.Threading.Tasks;