问题与大传输动态事件发布(json事件)



我们需要从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配置的序列化器的端点发送消息对象";

相关内容

  • 没有找到相关文章

最新更新