我們需要從 DB 發布多個事件作為 json 字串。通過 masstransit 發布此 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 事件已成功發布,但我們有一個奇怪的問題:“所有”事件消費者被空訊息資料呼叫!... 在 Rabbitmq jsut 中發布了我們的“動態事件”,但在 masstrasit 中所有消費者都稱為 !! 感謝您讓我們知道我們是否犯了錯誤
uj5u.com熱心網友回復:
您不需要所有的 JSON 操作,只需使用帶有為 RawJson 配置的序列化程式的端點發送訊息物件。我在此視頻中介紹了 JSON 互操作性。
此外,MassTransit 不允許發布匿名型別。您也許能夠發布動態或 Expando 物件。
uj5u.com熱心網友回復:
我像這樣使用 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 配置的序列化程式的端點發送訊息物件”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/317615.html
標籤:asp.net核心 兔子mq 轨道交通 消息代理 消息总线
上一篇:如何在Razor中為Bootstrap日期選擇器設定默認日期?
下一篇:EF核心字串區分大小寫不起作用
