我正在使用 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.M和package.Proto2.M,这是否冲突?
是否可以从 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)
我如何访问上下文属性/正确的方法是什么?
当需要存储以 Java 实例形式(来自生成的 java 类)的 protobuf3 消息时,最好的选择是存储对象本身,然后从数据库中读回它。
我用它来将此类消息存储在 Mongodb 中。在研究这个问题时,我找不到方法,所以决定在这里询问。
在编译原型文件时,我收到““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) 是否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) go ×1
grpc ×1
grpc-java ×1
java ×1
mongodb ×1
mongodb-java ×1
proto ×1
protobuf-c ×1
protobuf-go ×1