gpt4 book ai didi

c# - 如何区分一个 RabbitMQ 队列中的两个 JSON 对象?

转载 作者:太空狗 更新时间:2023-10-30 01:19:25 25 4
gpt4 key购买 nike

我希望能够在一个队列上发送两条不同的 JSON 消息。在 C# 中,我如何确定接收到的消息类型,以便我可以将消息反序列化为正确的对象?我应该使用消息头还是创建另一个队列?每个消息类型的队列对我来说似乎过多。谢谢!

额外细节:我有一个处理“运行”的 Windows 服务。运行 ID 由另一个系统分配,并且该 ID 被丢弃在队列中。我的服务获取 ID 并开始工作。每次运行都会创建一个对象。现在,如果我想取消工作,我必须停止服务。但是,这会停止所有工作。我想添加一个 CancelRun 类型的方法,但我只需要运行 ID。所以,我可以使用完全相同的 JSON(相同的类)。两个队列并不可怕,但我认为将类型或其他内容添加到自定义 header 可能会很聪明。

最佳答案

这是我的经历。我喜欢这种技术,因为我不会向不属于模型一部分的 JSON 添加内容。

IBasicProperties props = model.CreateBasicProperties();
props.Headers = new Dictionary<string, object>();
props.Headers.Add("RequestType", "CancelRunRequest");

然后,在接收方,我这样做(我正在使用自定义 EventArg obj 引发事件):

// Raise message received event
var args = new MessageReceivedArgs();
args.CorrelationId = response.BasicProperties.CorrelationId;
args.Message = Encoding.UTF8.GetString(response.Body);
args.Exchange = response.Exchange;
args.RoutingKey = response.RoutingKey;

if (response.BasicProperties.Headers != null && response.BasicProperties.Headers.ContainsKey("RequestType"))
{
args.RequestType = Encoding.UTF8.GetString((byte[])response.BasicProperties.Headers["RequestType"]);
}

MessageReceived(this, args);
model.BasicAck(response.DeliveryTag, false);

项目的其他地方:

private void NewRunIdReceived(object p, MessageReceivedArgs e)
{

if(e.RequestType.ToUpper() == "CANCELRUNREQUEST")
{
// This is a cancellation request
CancelRun(e);
}
else
{
// Default to startrun request for backwards compatibility.
StartRun(e);
}
}

关于c# - 如何区分一个 RabbitMQ 队列中的两个 JSON 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22939697/

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