直接在 FlexBuffer Map 上运行的中间日志服务

intermediate log services working directly on flexbuffer map

提问人:Ashok 提问时间:9/7/2023 最后编辑:Ashok 更新时间:9/8/2023 访问量:21

问:

我们有一个自定义日志管道,目前,每个步骤/服务都会解析传入的 json 并修改/添加标签。我正在探索降低这种序列化/反序列化成本的选项,因为某些服务不会修改数据,只需要读取/路由日志。

我正在尝试 flexbuffers(因为日志来自不同的服务并且不共享相同的架构)。

我正在考虑转换为此矢量并将其发送到下一个服务。下游服务可以使用 反序列化为其他格式。但我正在寻找将此向量直接用作 flexbuffer::MapReader 而不是通过中间步骤的方法。flexbuffers::to_vec()flexbuffers::from_slice()

fn test_flexbuffer_map() {
        let log = serde_json::json!({"time": 123, "level": "INFO", "extra" : {"message" : "Hello! World"}});
        let vec_fb = flexbuffers::to_vec(&log).unwrap();

        let map_fb = ??;
        let level = map_fb.idx("level"); // want to access fields directly
    }

--更新--

不确定这是否是正确的方法,但这有效。

        let u8_fb: &[u8] = &vec_fb;
        let map_fb = flexbuffers::Reader::get_root(u8_fb).unwrap().as_map();
        let level = map_fb.idx("level").as_str();
        println!("{level}");
防锈 平板缓冲器

评论

0赞 Chayim Friedman 9/7/2023
不能将键入的消息发送到管道吗?
0赞 Ashok 9/8/2023
嗨,@ChayimFriedman,我不明白你所说的输入消息是什么意思。你指的是任何格式吗?下游服务也可以是非 Rust 服务。
0赞 Chayim Friedman 9/8/2023
如果它们处于不同的流程中,你就不能(轻松)做到这一点。我的意思是直接发送。HashMap

答: 暂无答案