public class SendObserver : ISendObserver
{
public Task PostSend<T>(SendContext<T> context) where T : class
{
return Task.FromResult<object>(null);
}
public Task PreSend<T>(SendContext<T> context) where T : class
{
//1. get current thread identity object.
var currentThreadIdentityObject = Thread.CurrentPrincipal.Identity is JustIMIdentity ? (Thread.CurrentPrincipal.Identity as JustIMIdentity).IdentityObject : null;
if (currentThreadIdentityObject != null)
{
//2. set the headers.
context.Headers.Set(AppSettingConfig.RabbitMqIdentityHeaderKey, currentThreadIdentityObject.StaffID);
}
return Task.FromResult<object>(null);
}
public Task SendFault<T>(SendContext<T> context, Exception exception) where T : class
{
return Task.FromResult<object>(null);
}
}
and i register in autofac
//register in autofac
builder.Register(context =>
{
var busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
var uri = AppSettingConfig.RabbitMqBaseUri;
var host = cfg.Host(new Uri(uri), x =>
{
x.Username(AppSettingConfig.RabbitMqUserName);
x.Password(AppSettingConfig.RabbitMqUserPassword);
});
});
busControl.ConnectSendObserver(new SendObserver());
busControl.Start();
return busControl;
})
.SingleInstance()
.As<IBusControl>()
.As<IBus>();
builder.RegisterGeneric(typeof(RequestClient<,>)).AsSelf().AsImplementedInterfaces();
but when i update massTransit to 4.X,the message in queue is without header,it look like set header is not working,whats going on.