Привет, фанаты Rebus. Мы много лет использовали Rebus 0.84 или 1.0, и теперь переходит на версию 4.0 , и кажется, что она значительно улучшилась в плане реализации и производительности, но столкнулась с некоторыми проблемами, пока выполнение заказов для обработчиков .
Пример в предыдущей версии, мы делали
public class RebusInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
Configure.With(new WindsorContainerAdapter(container))
.Logging(l => l.Log4Net())
.Transport(t => t.UseMsmqAndGetInputQueueNameFromAppConfig())
.SpecifyOrderOfHandlers(t => t.First<AuthenticationHandler>())
.Serialization(x => x.UseJsonSerializer())
.MessageOwnership(m => m.FromRebusConfigurationSection())
.Sagas(m => m.StoreInNDb())
.Subscriptions(m => m.StoreInNDb())
.Timeouts(m => m.StoreInMemory())
.Events(e =>
{
e.MessageSent += (advancedbus, destination, message) =>
{
var timeToBeReceived = ConfigurationManager.AppSettings["TimeToBeReceived"];
if (string.IsNullOrEmpty(timeToBeReceived))
timeToBeReceived = "00:00:30";
if (timeToBeReceived != "-1")
{
advancedbus.AttachHeader(message, Headers.TimeToBeReceived, timeToBeReceived);
advancedbus.AttachHeader(message, Headers.Express, "rebus-express");
}
};
})
.CreateBus()
.Start();
}
}
и теперь, если я реализую то же самое с rebus 4.0, то каким-то образом, пытаясь "SpecifyOrderOfHandlers "он дает ошибку времени компиляции, что он не принимает никаких аргументов, тогда как мы можем реализовать упорядочение обработчиков, ниже приведена реализация с rebus 4.0
using Rebus.Config;
using Rebus.Persistence.InMem;
using Rebus.Handlers;
using Rebus.Messages;
public void Install(IWindsorContainer container, IConfigurationStore store)
{
Configure.With(new CastleWindsorContainerAdapter(container))
.Options(o =>
{
o.SpecifyOrderOfHandlers(o => o.First<AuthenticationHandler>());
})
.Logging(l => l.Log4Net())
.Transport(t => t.UseMsmq(ConfigurationManager.AppSettings["InputQueue"]))
.Routing(r => r.TypeBasedRoutingFromAppConfig())
.Sagas(m => m.StoreInNDb())
.Subscriptions(m => m.StoreInNDb())
.Timeouts(m => m.StoreInMemory())
.Events(e =>
{
e.BeforeMessageSent += (bus, headers, message, context) =>
{
var timeToBeReceived = ConfigurationManager.AppSettings["TimeToBeReceived"];
if (string.IsNullOrEmpty(timeToBeReceived))
timeToBeReceived = "00:00:30";
if (timeToBeReceived != "-1")
{
headers.Add(Headers.TimeToBeReceived, timeToBeReceived);
headers.Add(Headers.Express, "rebus-express");
}
};
})
.Start();
}
Пожалуйста, предложите, как реализовать упорядочение обработчиков с rebus 4.0 иТакже дайте мне знать, если вышеуказанный подход внедрения rebus 4.0 является правильным или нуждается в улучшении.