gpt4 book ai didi

java - RabbitMQ 从 C# 解析 "client_properties" header

转载 作者:太空宇宙 更新时间:2023-11-04 09:58:15 25 4
gpt4 key购买 nike

我正在通过事件插入监听连接更改(“amq.rabbitmq.event”,“connection.#”)。

它工作正常,因此我在 java 端添加两个附加参数作为客户端属性,以获取连接或断开连接的用户的身份。

但是在 c# 端,我只能以 byte[] 列表的形式访问这些属性,并且不确定如何将其转换为字典等。

如果我打印所有条目

if (args.BasicProperties.Headers.TryGetValue("client_properties", out object value))
{
var items = value as List<object>;
foreach(var item in items)
{
Console.WriteLine($"{item.GetType().ToString()}");
var bytes = item as byte[];
result.Add(Encoding.UTF8.GetString(bytes));
}
}

我可以看到这个:

{<<"platform">>,longstr,<<"Java">>}
{<<"capabilities">>,table,[{<<"connection.blocked">>,bool,true},{<<"basic.nack">>,bool,true},{<<"exchange_exchange_bindings">>,bool,true},{<<"authentication_failure_close">>,bool,true},{<<"publisher_confirms">>,bool,true},{<<"consumer_cancel_notify">>,bool,true}]}
{<<"groupId">>,longstr,<<"1e6e935f0d4d9ec446d67dadc85cbafd10d1a095">>}
{<<"information">>,longstr,<<"Licensed under the MPL. See http://www.rabbitmq.com/">>}
{<<"version">>,longstr,<<"4.8.1">>}
{<<"copyright">>,longstr,<<"Copyright (c) 2007-2018 Pivotal Software, Inc.">>}
{<<"product">>,longstr,<<"RabbitMQ">>}

什么类型的对象格式以及如何解析它?:

{<<id>>,type,<<value>>}

最佳答案

显然(至于我在 Rabbit 客户端谷歌组针对此问题得到的答案),client_properties 并不是为接收方读取而创建的。

然而,拥有像 LWT(Last Will and Testament)这样的东西确实是一个很好的方法,那么我现在就使用它自己进行解析。

if (args.BasicProperties.Headers.TryGetValue("client_properties", out object value))
{
var items = value as List<object>;
foreach (var item in items)
{
var bytes = item as byte[];
//{<<id>>, type, <<value>>}
String itemStr = Encoding.UTF8.GetString(bytes);
var parts = itemStr.Split(",");
var key = CleanErlangString(parts[0]);
var value = CleanErlangString(parts[2]);

// Do things with key/value

}
}

清除Erlang函数

private static string CleanErlangString(string toClean)
{
return toClean
.Replace("{", "").Replace("}", "")
.Replace("\"", "")
.Replace("<<", "").Replace(">>", "");
}

我正在做的是将其用作 LWT,是在客户端设置自定义属性,然后在读取“amq.rabbitmq.event”、“connection.#”处的事件时获取它。这样我就知道谁与我的核心服务器断开了连接,甚至将某些内容作为 LWT 进行处理。

我希望这对某人有帮助:)

关于java - RabbitMQ 从 C# 解析 "client_properties" header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53836624/

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