无法通过 MassTransit 中 IPublishEndpoint 的 Publish 方法发送自定义对象列表(消息类型不能是系统类型)

Could not send list of custom objects via Publish method of IPublishEndpoint in MassTransit (Messages types must not be System type)

请注意,这不是 的重复问题。

我在 Asp.NET Core Web API (.Net 6) 中使用 RabbitMQ 版本 8.0.2。我可以使用 IPublishEndpointPublish 方法成功发布 自定义对象 ,但是,每当我尝试发送发布 对象列表 我得到这个错误:

System.ArgumentException: Messages types must not be System type

这是完整的示例:

public class WeatherForecastController : ControllerBase
    {
        private readonly IPublishEndpoint _publishEndpoint;
        public WeatherForecastController(IPublishEndpoint publishEndpoint)
        {
            _publishEndpoint = publishEndpoint;
        }

        [HttpGet(Name = "GetWeatherForecast")]
        public async Task<IEnumerable<WeatherForecast>> Get()
        {
            var data = Enumerable.Range(1, 3).Select(index => new WeatherForecast
            {
                Date = DateTime.Now.AddDays(index),
                TemperatureC = Random.Shared.Next(-20, 55),
                myDictionary = new Dictionary<string, string>
                                {
                                    { "key1", "value1" },
                                    { "key2", "value2" }
                                }
            }).ToList();

            //Error!
            await _publishEndpoint.Publish<IList<WeatherForecast>>(data);

            //Working 
           //await _publishEndpoint.Publish<WeatherForecast>(data.FirstOrDefault());
            
            return data;
        }
    }

并且在Program.cs

builder.Services.AddMassTransit(options => {
    options.UsingRabbitMq((context, cfg) =>
    {
        cfg.Host(new Uri("rabbitmq://localhost:5672"), h =>
        {
            h.Username("guest");
            h.Password("guest");
        });
    });
});

为什么我不能将 IListPublish 方法一起使用?

您不能将 IList<T>Publish 一起使用,因为它不受支持。有一些 PublishBatch 扩展方法可以枚举列表并为每个元素调用 Publish