2017-02-25 38 views

回答

7

在NServiceBus版本6中,流水线由一系列阶段组成,每个阶段嵌套在前一个阶段,如一组Russian Dolls。对于传入的消息,该阶段是(按顺序):

  • ITransportReceiveContext
  • IIncomingPhysicalMessageContext
  • IIncomingLogicalMessageContext,和
  • IInvokeHandlerContext

当一个阶段中创建的行为,你会通过一个名为next()的代表。当您致电next()时,您将执行管道中的下一个行为(这可能会将管道移至下一个阶段)。对next()的调用返回一个Task,它指示管道的内部部分何时完成。

这让你有机会在移动到下一个阶段之前调用你的代码,并调用更多的代码下一个阶段已经完成这样的后:

public class LogCommandEntryBehavior : Behavior<IIncomingLogicalMessageContext> 
{ 
    public override async Task Invoke(IIncomingLogicalMessageContext context, Func<Task> next) 
    { 
     // custom logic before calling the next step in the pipeline. 

     await next().ConfigureAwait(false); 

     // custom logic after all inner steps in the pipeline completed. 
    } 
} 

如果你想记录有关信息处理消息,我建议看看IInvokeHandlerContext阶段。它包含有关消息如何处理的信息,并且将为每个调用的处理程序调用一次(如果有多个)。如果你不需要那个级别的信息,那么IIncomingLogicalMessageContext可能就是你所需要的。

你可以阅读更多有关在特定文档网站上的第6版管道:

+0

谢谢麦克,这是我来到了确切的结论。我应该增加答案。出于某种原因,我的大脑没有建立“Behavior '中的'next()'方法执行的连接。一旦我意识到这一切都在一起。 –

相关问题