Skip to content

fengfshao/dynamic-proto

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

项目说明

运行时动态构建protobuf message的一种方案,无需protoc编译出源代码,可由.proto协议直接生成Message及字节数组。

在与下游使用protobuf协议交互的数据处理场景中,动态构建pb+配置远程化, 可以提高程序的灵活性,避免字段变更时的代码改动与重新编译部署。

使用示例

public class Demo {
    public static void main(String[] args) {
        
        // 注册proto协议
        DynamicProtoBuilder.ProtoHolder.registerOrUpdate(
                Thread.currentThread().getContextClassLoader()
                        .getResource("simple_person.proto").openStream(), "simple_person.proto");

        // 准备要填充的数据
        Map<String, Object> fieldValues = new HashMap<>();
        fieldValues.put("id", 1);
        fieldValues.put("name", "jihite");
        fieldValues.put("email", "jihite@jihite.com");
        fieldValues.put("address", Arrays.asList("address1", "address2", "address3"));

        // 生成Message
        Message message = DynamicProtoBuilder
                .buildMessage("simple_person.proto", "SimplePersonMessage", fieldValues);
        byte[] data = message.toByteArray();
    }
}

更多示例见单元测试

About

运行时动态构建protobuf message的一种方案,无需任何protoc编译

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages