[英]Can you define UseRawJsonSerializer() per SendEndpoint?
我們有多個端點; 只有一個是原始的 JSON,沒有來自 MassTransit 的消息標頭。
我將一個 ReceiveEndpoint 配置為能夠使用原始 JSON。作為測試,我將整個總線配置為使用原始 JSON,這按預期工作
僅配置一個 SendEndpoint 來發送原始 JSON 是我需要幫助的。
Bus
,使用GetSendEndpoint()
獲取 SendEndpoint,然后更改所述 SendEndpoint 的序列化程序?publish
也存在同樣的問題?總線配置:
builder.Services.AddMassTransit(x =>
{
x.AddConsumer<AssemblingConsumer>();
x.UsingRabbitMq((context, cfg) =>
{
cfg.Host("localhost", h =>
{
h.Username("admin");
h.Password("admin");
});
cfg.UseRawJsonSerializer();
cfg.ReceiveEndpoint("Assembling", ep =>
{
ep.ConfigureConsumeTopology = false;
ep.ClearSerialization();
ep.UseRawJsonSerializer();
ep.UseRawJsonDeserializer();
ep.ConfigureConsumer<AssemblingConsumer>(context);
// ep.Instance(assemblingConsumer);
});
cfg.ConfigureEndpoints(context);
});
})
發送:
var endpoint = _bus.GetSendEndpoint(new Uri("queue:Assembling")).Result;
endpoint.Send<Message>(message);
我看到另一個解決方案:
為一個發送操作創建一個新總線,它使用原始 JSON。發送操作后再次處理總線以避免打開多個不再使用的連接。
var bus = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
cfg.Host("localhost", h =>
{
h.Username("admin");
h.Password("admin");
});
cfg.UseRawJsonSerializer();
});
ProbeResult result = _bus.GetProbeResult();
Console.WriteLine(JsonConvert.SerializeObject(result));
var endpoint = bus.GetSendEndpoint(new Uri("queue:Assembling")).Result;
endpoint.Send<Message>(message);
蠻力,但您可以在發送消息時通過覆蓋序列化程序來更改序列化程序,如下所示:
await InputQueueSendEndpoint.Send(message, x =>
{
x.Serializer = new SystemTextJsonRawMessageSerializer(RawSerializerOptions.All);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.