gpt4 book ai didi

c# - 将 NServiceBus 事件从 v6 JSON 发布到 v4 XML 环境

转载 作者:太空宇宙 更新时间:2023-11-03 12:24:44 25 4
gpt4 key购买 nike

我正在寻找一种方法来将事件从我们新的 NServiceBus 6 端点环境发布到旧的 v4 端点环境。更有趣的是,v6 使用 JSON 而 v4 使用 XML。

  • 我是否需要简单地在传入的 v4 端点上添加一个修改器?
  • 如何将 JSON 消息转换为 XML 消息?在上面提到的突变体中?
  • 我是否需要在传出事件消息中添加任何特定的 v4 消息 header ?

我使用 MSMQ 作为底层传输层。

最佳答案

前进的最简单方法可能是编写自定义序列化器定义。以下示例假定使用 NServiceBus v6 中可用的默认 XmlSerializer 和 JsonSerializer。

编写自定义序列化程序定义

public class CustomJsonSerializer : SerializationDefinition
{
public override Func<IMessageMapper, IMessageSerializer> Configure(ReadOnlySettings settings)
{
var xmlSerializerDefinition = new XmlSerializer();
var xmlSerializerFactory = xmlSerializerDefinition.Configure(settings);

var jsonSerializerDefinition = new JsonSerializer();
var jsonSerializerFactory = jsonSerializerDefinition.Configure(settings);
return mapper => new DecoratorSerializer(xmlSerializerFactory(mapper), jsonSerializerFactory(mapper));
}
}

编写一个具有自定义逻辑的序列化器装饰器,以将消息类型转发到 XmlSerializer(如果它们是针对 V4 端点的)。

class DecoratorSerializer : IMessageSerializer
{
IMessageSerializer xmlSerializer;
IMessageSerializer jsonSerializer;

public DecoratorSerializer(IMessageSerializer xmlSerializer, IMessageSerializer jsonSerializer)
{
this.xmlSerializer = xmlSerializer;
this.jsonSerializer = jsonSerializer;
}

public void Serialize(object message, Stream stream)
{
if (message.GetType() == typeof(MyMessage))
{
xmlSerializer.Serialize(message, stream);
}
else
{
jsonSerializer.Serialize(message, stream);
}
}

public object[] Deserialize(Stream stream, IList<Type> messageTypes = null)
{
return jsonSerializer.Deserialize(stream, messageTypes);
}

public string ContentType
{
get { return jsonSerializer.ContentType; }
}
}

像下面这样使用 CustomSerializer

endpointConfiguration.UseSerializer<CustomJsonSerializer>();

可以在 this github repo 上找到工作示例.该示例使用命令,但该方法也适用于 PubSub。唯一需要注意的是特定消息类型将始终使用一种格式。因此,不可能在 Xml 中发布一次相同的事件,而在 Json 中发布其他事件。

关于c# - 将 NServiceBus 事件从 v6 JSON 发布到 v4 XML 环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45585066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com