hatalarını izlemek için ServicePulse kullanmaktır. Şu anda çalışmakta olduğum istemci, özel olarak yapılmış bir merkezi günlük kaydedici kullanıyor ve iletiler hata sırasına yönlendirildiğinde, bu günlük deposuna oturum açmak için NServiceBus istiyoruz.
NServiceBus istisnası ilk istisna dahil edilmişse, log4net yapılandırmasını düzenleyerek bunu gerçekleştirebildik, şu anda NServiceBus başarısızlığa neyin neden olduğu hakkında hiçbir ayrıntı içermeyen genel bir hata iletisi kaydeder.
NServiceBus aşağıdaki gözlenebilirleri içeren bir sınıf adında NServiceBus.Faults.ErrorsNotifications vardır:
- MessageSentToErrorQueue
- MessageHasFailedAFirstLevelRetryAttempt
- MessageHasBeenSentToSecondLevelRetries
Bu gözlenebilirlere abone olabilirsiniz uç nokta aşağıdaki örnekte olduğu gibi başlar, mesajlar se seçilerek bir hatayı günlüğe kaydeder nt hata kuyruğuna:
public class GlobalErrorHandler : IWantToRunWhenBusStartsAndStops
{
private readonly ILogger _logger;
private readonly BusNotifications _busNotifications;
readonly List<IDisposable> _notificationSubscriptions = new List<IDisposable>();
public GlobalErrorHandler(ILogger logger, BusNotifications busNotifications)
{
_logger = logger;
_busNotifications = busNotifications;
}
public void Start()
{
_notificationSubscriptions.Add(_busNotifications.Errors.MessageSentToErrorQueue.Subscribe(LogWhenMessageSentToErrorQueue));
}
public void Stop()
{
foreach (var subscription in _notificationSubscriptions)
{
subscription.Dispose();
}
}
private void LogWhenMessageSentToErrorQueue(FailedMessage message)
{
var properties = new
{
MessageType = message.Headers["NServiceBus.EnclosedMessageTypes"],
MessageId = message.Headers["NServiceBus.MessageId"],
OriginatingMachine = message.Headers["NServiceBus.OriginatingMachine"],
OriginatingEndpoint = message.Headers["NServiceBus.OriginatingEndpoint"],
ExceptionType = message.Headers["NServiceBus.ExceptionInfo.ExceptionType"],
ExceptionMessage = message.Headers["NServiceBus.ExceptionInfo.Message"],
ExceptionSource = message.Headers["NServiceBus.ExceptionInfo.Source"],
TimeSent = message.Headers["NServiceBus.TimeSent"]
};
_logger.Error("Message sent to error queue. " + properties, message.Exception);
}
}
gözlenebilen Reaktif Uzantıları kullanılarak uygulanır, bu nedenle bunun işe yaraması için Nuget paketini Rx Çekirdekli yüklemek zorunda kalacaktır.
İkinci düzey deneme sürümleriyle kullanamıyorsanız gerçekten çok berbat. Yine de teşekkürler! –