You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用IRequestClient<T>与NewtonsoftJson时的MassTransit+RMQ异常问题

问题:MassTransit配置Newtonsoft序列化器后请求-响应模式抛出ArgumentNullException

环境

  • ASP.NET Core API 6.0
  • MassTransit 8.0.16
  • MassTransit.Newtonsoft 8.0.16

问题描述

实现请求-响应模式并添加Newtonsoft序列化器配置后,请求与响应本身执行成功,但请求结束后日志中出现如下异常:

System.ArgumentNullException: Value cannot be null. (Parameter 'source')
   at System.Linq.ThrowHelper.ThrowArgumentNullException(ExceptionArgument argument)
   at System.Linq.Enumerable.Select[TSource,TResult](IEnumerable`1 source, Func`2 selector)
   at MassTransit.RequestFaultException..ctor(String requestType, Fault fault) in /_/src/MassTransit.Abstractions/Exceptions/RequestFaultException.cs:line 13
   at MassTransit.Clients.ClientRequestHandle`1.Fail(Fault message) in /_/src/MassTransit/Clients/ClientRequestHandle.cs:line 221
   at MassTransit.Clients.ClientRequestHandle`1.FaultHandler(ConsumeContext`1 context) in /_/src/MassTransit/Clients/ClientRequestHandle.cs:line 214
   at MassTransit.Clients.ClientRequestHandle`1.<HandleFault>g__MessageHandler|34_0(ConsumeContext`1 context) in /_/src/MassTransit/Clients/ClientRequestHandle.cs:line 201
   at MassTransit.Middleware.HandlerMessageFilter`1.MassTransit.IFilter<MassTransit.ConsumeContext<TMessage>>.Send(ConsumeContext`1 context, IPipe`1 next) in /_/src/MassTransit/Middleware/HandlerMessageFilter.cs:line 44
   at MassTransit.Middleware.HandlerMessageFilter`1.MassTransit.IFilter<MassTransit.ConsumeContext<TMessage>>.Send(ConsumeContext`1 context, IPipe`1 next) in /_/src/MassTransit/Middleware/HandlerMessageFilter.cs:line 72
   at MassTransit.Middleware.KeyFilter`2.Send(TContext context, IPipe`1 next) in /_/src/MassTransit/Middleware/KeyFilter.cs:line 46
   at MassTransit.Middleware.TeeFilter`1.<>c__DisplayClass5_0.<Send>g__SendAsync|1>d.MoveNext() in /_/src/MassTransit/Middleware/TeeFilter.cs:line 40
--- End of stack trace from previous location ---
   at MassTransit.Middleware.OutputPipeFilter`2.SendToOutput(IPipe`1 next, TOutput pipeContext) in /_/src/MassTransit/Middleware/OutputPipeFilter.cs:line 76
   at MassTransit.Middleware.OutputPipeFilter`2.SendToOutput(IPipe`1 next, TOutput pipeContext) in /_/src/MassTransit/Middleware/OutputPipeFilter.cs:line 108
   at MassTransit.Middleware.DynamicFilter`1.<>c__DisplayClass10_0.<Send>g__SendAsync|0>d.MoveNext() in /_/src/MassTransit/Middleware/DynamicFilter.cs:line 89
--- End of stack trace from previous location ---
   at MassTransit.Middleware.DeserializeFilter.Send(ReceiveContext context, IPipe`1 next) in /_/src/MassTransit/Middleware/DeserializeFilter.cs:line 40
   at MassTransit.Middleware.RescueFilter`2.MassTransit.IFilter<TContext>.Send(TContext context, IPipe`1 next) in /_/src/MassTransit/Middleware/RescueFilter.cs:line 43

移除以下序列化配置后,问题消失,但业务需要保留该配置以兼容其他基于RabbitMQ的发布/消费项目:

cfg.ClearSerialization(); 
cfg.UseNewtonsoftRawJsonSerializer();

尝试过以下配置调整,未解决问题:

cfg.ConfigureNewtonsoftJsonSerializer(s =>
{
    s.NullValueHandling = NullValueHandling.Ignore;
    return s;
});

内容的提问来源于stack exchange,提问作者Ivan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 15:55:07