无法通过 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。我可以使用 IPublishEndpoint
的 Publish
方法成功发布 自定义对象 ,但是,每当我尝试发送发布 对象列表 我得到这个错误:
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");
});
});
});
为什么我不能将 IList
与 Publish
方法一起使用?
您不能将 IList<T>
与 Publish
一起使用,因为它不受支持。有一些 PublishBatch
扩展方法可以枚举列表并为每个元素调用 Publish
。
请注意,这不是
我在 Asp.NET Core Web API (.Net 6)
中使用 RabbitMQ
版本 8.0.2。我可以使用 IPublishEndpoint
的 Publish
方法成功发布 自定义对象 ,但是,每当我尝试发送发布 对象列表 我得到这个错误:
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");
});
});
});
为什么我不能将 IList
与 Publish
方法一起使用?
您不能将 IList<T>
与 Publish
一起使用,因为它不受支持。有一些 PublishBatch
扩展方法可以枚举列表并为每个元素调用 Publish
。