Rebus 4.0 - 如何指定处理程序的顺序,尝试使用"SpecifyOrderOfHandlers"方法但给出编译时错误



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将指导您:(

相关内容

  • 没有找到相关文章

最新更新