如何查看nserviceBus消息的目的地?

时间:2017-11-22 05:22:10

标签: nservicebus nservicebus5 nservicebus6

在nServiceBus的第5版中,我有一个跟踪飞行中消息的行为。

在行为中我能够访问DeliveryOptions(SendOptions)并查看目标队列,在NSB 6中更改了行为,我似乎无法再访问消息的目的地。

是否有人知道从行为中访问外发邮件的目的地?

v5中的先前代码:

 public class PendingCommandBehavior : IBehavior<OutgoingContext>
 {
        public void Invoke(OutgoingContext context, Action next)
        {
            var sendOptions = context.DeliveryOptions as Nsb.Unicast.SendOptions;
            if (sendOptions != null && context.OutgoingMessage.MessageIntent == Nsb.MessageIntentEnum.Send)
            {
                var destinationEndpoint = sendOptions.Destination.Queue;

v6中的代码:

 public class PendingCommandBehavior : Behavior<IOutgoingSendContext>
    {
        public override async Task Invoke(IOutgoingSendContext context, Func<Task> next)
        {
            // context doesn't have any destination queue information???

1 个答案:

答案 0 :(得分:6)

管道中<!DOCTYPE html> <html> <head> <title>Load Board</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" /> <script src="https://cdn.datatables.net/1.10.12/js/jquery.dataTables.min.js"></script> <script src="https://cdn.datatables.net/1.10.12/js/dataTables.bootstrap.min.js"></script> <script src="https://cdn.datatables.net/plug-ins/1.10.15/api/fnReloadAjax.js"></script> <link rel="stylesheet" href="https://cdn.datatables.net/1.10.12/css/dataTables.bootstrap.min.css" /> </head> <body> <br /><br /> <div class="container"> <h3 align="center">Load Board</h3> <br /> <div class="table-responsive"> <table id="employee_data" class="table table-striped table-bordered"></table> </div> </div> <script> $(document).ready(function() { var table; $.post('table.php', {}, function(data) { if(data) { console.log(data); table = $('#employee_data').DataTable({ data: data, columns: [ {'data': 'shipping_date_c', 'title': 'Date'} ,{'data': 'shipping_time_c', 'title': 'Time'} ,{'data': 'billing_address_postalcode', 'title': 'Zip'} ,{'data': 'billing_address_city', 'title': 'City'} ,{'data': 'billing_address_country', 'title': 'Country'} ,{'data': 'arrival_date_c', 'title': 'Date'} ,{'data': 'arrival_time_c', 'title': 'Time'} ,{'data': 'shipping_address_postalcode', 'title': 'Zip'} ,{'data': 'shipping_address_city', 'title': 'City'} ,{'data': 'shipping_address_country', 'title': 'Country'} ,{'data': 'description', 'title': 'Description'} ] }); } }, 'json'); setInterval(function () { table.clear().draw(); $.post('table.php', {}, function(data) { table.rows.add(data).draw(); }, 'json'); }, 3000); }); </script> </body> </html> 太早,无法捕获物理目的地。每个传出发送操作将在NServiceBus版本6中按顺序执行以下上下文:

  • IOutgoingSendContext
  • IOutgoingSendContext
  • IOutgoingLogicalMessageContext
  • IOutgoingPhysicalMessageContext
  • IRoutingContext(如果您是从消息处理程序内部发送的)
  • IBatchDispatchContext

选择IDispatchContext路由策略但在IOutgoingSendContext之后才转换为物理地址。

出于这个原因,如果你想跟踪物理地址,最好的办法是坐在IRoutingContext。此上下文将包含IDispatchContext个集合,每个集合都有TransportOperation。这可以是AddressTag的{​​{1}}实例,也可以是UnicastAddressTag的{​​{1}}实例。

以下是一些可以帮助您入门的代码:

Destination

有关NServiceBus版本6管道的更多信息,请参阅NServiceBus文档中的Steps, Stages and Connectors