【问题标题】:How to log MassTransit published messages/internal errors?如何记录 MassTransit 发布的消息/内部错误?
【发布时间】:2021-05-05 14:30:03
【问题描述】:

我在 IIS 上有一个 .Net 4.8 Web 应用程序,该应用程序曾经调用过,它使用 MassTransit 将消息发布到 RabbitMQ 队列。大多数情况下一切正常,但在某些情况下(如十分之一)我不知道为什么没有发布任何内容。我在发布之前/之后有一个调试日志,并且永远不会触发“之后”。没有例外,没有什么。

// Constructor, fired on each request - maybe it's better to have static one?
public QueueLibHelper()
{
    var cfg = ConfigHelper.GetConfig();
    bus = Bus.Factory.CreateUsingRabbitMq(x => 
        x.Host(new Uri(cfg.Host),
            h => {
                h.Heartbeat(15);
                h.Username(cfg.UserName); 
                h.Password(cfg.Password);
                if (!String.IsNullOrWhiteSpace(cfg.Nodes))
                {
                    string[] nodes = cfg.Nodes.Split(',');
                    h.UseCluster(c =>
                    {
                        foreach (var n in nodes)
                        {
                            c.Node(n);
                        }
                    });
                }
            }));
    bus.Start();
}

//  Sending to queue, 
public void UpdatePmtToQueue(long paymentId, string status)
{
    var message = new InputData() { Id = paymentId, Status = status };
    MassTransit.Util.TaskUtil.Await(() => bus.Publish<IInputData>(message));
    StopBus();
}

我认为它可能与整个异步/等待情况有关。我也试过GetAwaiter().GetResult(),但这种方法有很多不同的问题。也许公共汽车在发布实际运行之前以某种方式关闭? 我尝试像这样添加 MT 日志记录,但没有写入日志:

<source name="MassTransit" switchValue="All">
    <listeners>
      <add name="Console" type="MassTransit.Logging.Tracing.ConsoleTraceListener, MassTransit" />
      <add name="Xml" type="System.Diagnostics.XmlWriterTraceListener" initializeData="MassTransit.svclog" />
    </listeners>
  </source>

任何想法可能是错误的,或者至少如何查看 MassTransit 内部正在做什么(失败)?

【问题讨论】:

    标签: c# asp.net rabbitmq masstransit


    【解决方案1】:

    MassTransit 使用Microsoft.Extensions.Logging.Abstractions 进行日志输出,任何与其集成的日志框架都应该可以工作。

    通常在应用程序启动时启动总线,并让它一直运行直到应用程序退出,此时应该停止总线以确保所有待处理的消息都已传递。

    MassTransit 非常异步,它大量使用 TPL。因此,如果您试图跨越从同步到异步的鸿沟,TaskUtil.Await() 大部分时间都可以工作,但里程会有所不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2021-04-22
      • 1970-01-01
      • 2012-02-11
      相关资源
      最近更新 更多