标签: protobuf-java

Protobuf:对不同的包使用相同的消息名称

我正在使用 protobuf java,如下.proto

// service1.proto
option java_package = "package";
option java_outer_classname = "Proto1";
message M {
   ... // some definition
}
Run Code Online (Sandbox Code Playgroud)

// service2.proto
option java_package = "package";
option java_outer_classname = "Proto2";
message M {
   ... // some different definition
}
Run Code Online (Sandbox Code Playgroud)

编译时,会抛出service2.proto错误"M" is already defined in service1.proto

但从包和生成的代码来看,它们应该是package.Proto1.Mpackage.Proto2.M,这是否冲突?

protocol-buffers protobuf-java

3
推荐指数
1
解决办法
2242
查看次数

如何从 grpc Context.current() 访问属性?

是否可以从 rpc 方法定义访问 grpc 调用的上下文属性?

我写了一个类似于这个的服务器拦截器

@Override
public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(ServerCall<ReqT, RespT> call, final Metadata requestHeaders, ServerCallHandler<ReqT, RespT> next) {

   Context.Key<String> USER = Context.key("USER");
 
  Context ctx = Context.current().withValue(USER, "chandan");
  return Contexts.interceptCall(ctx, call, requestHeaders, next);
}
Run Code Online (Sandbox Code Playgroud)

在服务实现中,我正在尝试类似的东西

Context.Key<String> key = Context.key("USER");
String value = key.get(Context.current())
Run Code Online (Sandbox Code Playgroud)

每次值为空。但是在调试中的IntelliJ我可以在看到那些值context.current().keyValueEntries作为

CompressedIndex(bitmap=100001000000000000000000000000 Leaf(key=USER value=chandan) Leaf(key=opencensus-trace-span-key value=BlankSpan) )
Run Code Online (Sandbox Code Playgroud)

我如何访问上下文属性/正确的方法是什么?

protocol-buffers grpc grpc-java protobuf-java

2
推荐指数
1
解决办法
2125
查看次数

在 Mongodb 中存储 protobuf java 对象的直接方法?

当需要存储以 Java 实例形式(来自生成的 java 类)的 protobuf3 消息时,最好的选择是存储对象本身,然后从数据库中读回它。

我用它来将此类消息存储在 Mongodb 中。在研究这个问题时,我找不到方法,所以决定在这里询问。

protocol-buffers mongodb mongodb-java proto protobuf-java

1
推荐指数
1
解决办法
4563
查看次数

当我尝试在 golang 中编译 Protobuf 时,它显示“int”未定义。

在编译原型文件时,我收到““int”未定义”。

“测试.proto”文件

syntax = "proto3";

package test;

option go_package = "/;test";

message User {
    string FirstName = 1;
    string LastName = 2;
    string Address = 3;
    int Contact = 4;
    int Age = 5;
}
Run Code Online (Sandbox Code Playgroud)
Output:
test.proto:11:5: "int" is not defined.
Run Code Online (Sandbox Code Playgroud)

go protocol-buffers protobuf-c protobuf-java protobuf-go

1
推荐指数
1
解决办法
1878
查看次数

Protobuf 生成的类中的 newBuilder() 是否会创建一个新的 Java 对象?

是否newBuilder()创建一个新的Java对象?我的快速测试似乎并非如此。调用.hashcode()2个不同的对象,它具有相同的哈希码。

import com.mydomain.proto.users.api.User;

...

User a = User.newBuilder().setUserUuid("1111111111").build();
User b = User.newBuilder().setUserUuid("1111111111").build();

System.out.println("a hashcode: " + a.hashCode());
System.out.println("b hashcode: " + b.hashCode());

// assertNotEquals fails.
assertNotEquals(a.hashCode(), b.hashCode());


Run Code Online (Sandbox Code Playgroud)

将它们打印出来并看到哈希码是相同的,尽管我期待一个新的 Java 对象。

a hashcode: 611667980
b hashcode: 611667980

Run Code Online (Sandbox Code Playgroud)

注意,我们正在使用这个

'com.google.protobuf:protobuf-java-util:3.12.0'
Run Code Online (Sandbox Code Playgroud)

java protocol-buffers protobuf-java

0
推荐指数
1
解决办法
3189
查看次数