我们需要从DB发布多个事件作为json字符串。像这样通过传输发布这个json事件:
using var scope = _serviceScopeFactory.CreateScope();
var sendEndpointProvider = scope.ServiceProvider.GetService<ISendEndpointProvider>();
var endpoint = await sendEndpointProvider.GetSendEndpoint(new System.Uri("exchange:IntegrationEvents.DynamicEvent:DynamicEvent"))
var json = JsonConvert.SerializeObject(dynamicObject, Newtonsoft.Json.Formatting.None);// sample
var obj = JsonConvert.DeserializeObject(json, new JsonSerializerSettings { });
await endpoint.Send(obj,i=>i.Serializer.ContentType.MediaType= "application/json");
,在config中我们使用这个config:
cfg.UseRawJsonSerializer();
当使用这个配置时,json事件成功发布,但我们有奇怪的问题:"all"事件消费者被空消息数据调用!…在Rabbitmq刚刚发布了我们的"动态事件",但在masstrasit中,所有的消费者都调用了!!如果我们犯了错误,谢谢你告诉我们。
您不需要所有的JSON操作,只需使用带有为RawJson配置的序列化器的端点发送消息对象。我将在本视频中介绍JSON互操作性。
同样,MassTransit不允许发布匿名类型。您可能能够发布动态或Expando对象。
我像这样使用了ExpandoObject,并得到了这个异常">消息类型不能在System命名空间中:System. dynamic .ExpandoObject";:
dynamic dynamicObject = new ExpandoObject();
dynamicObject.Id = 1;
dynamicObject.Name = "NameForName";
await endpoint.Send(dynamicObject);
像这样使用,我们得到与">相同的结果,所有消费者都调用":
var dynamicObject = new ExpandoObject() as IDictionary<string, object>;
dynamicObject.Add("Id", 1);
dynamicObject.Add("Name", "NameForName");
我看了你的视频,你直接从rabbitmq使用。如何使用带有为RawJson配置的序列化器的端点发送消息对象";