首页 > 解决方案 > 公共交通动态事件发布(json事件)的问题

问题描述

我们需要从数据库发布多个事件作为 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"); 

在配置中我们使用这个配置:

   cfg.UseRawJsonSerializer();

使用此配置时,json 事件已成功发布,但我们有一个奇怪的问题:“all”事件使用者被空消息数据调用!...在Rabbitmq jsut 中发布了我们的“动态事件”,但在masstrasit 中,所有消费者都调用了!感谢您让我们知道我们是否犯了错误

标签: asp.net-corerabbitmqmasstransitmessagebrokermessage-bus

解决方案


我像这样使用 ExpandoObject 并得到这个异常“消息类型不能在系统命名空间中: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 使用 .. 如何在 C# 代码中“使用带有为 RawJson 配置的序列化程序的端点发送消息对象”。


推荐阅读