使用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
相关产品推荐
相关产品推荐

