hellooo 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实现相同的实现
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的方法是正确的还是需要改进的。
您只是简单地打电话给SpecifyOrderOfHandlers
太复杂了 - 这应该可以解决:
Configure.With(activator)
(...)
.Options(o =>
{
o.SpecifyOrderOfHandlers()
.First<AuthenticationHandler>();
})
.(...)
.Start();
如果不容易明显,则可能是因为SpecifyOrderOfHandlers
在另一个名称空间中,因此,如果您添加
using Rebus.Handlers.Reordering;
在您某个地方的文件顶部,我敢打赌Intellisense将指导您:(