相关疑难解决方法(0)

在 ZeroMQ 中使用 Protocol Buffers 实现 RPC

我有一个客户端和一个服务器的简单设置。客户端想要在服务器中执行一个使用 ZeroMQ 进行通信的方法。我将使用 REQ 和 REP 套接字,因为它们适用于这个用例。不过,我对 protobuf 的定义有疑问。我认为这两个选项可用于实现目标:

message ControlService{
    string control = 1;
    int32 serverId = 2;
    bool block = 3;
    double temperature = 4;
}
Run Code Online (Sandbox Code Playgroud)

其中“control”包含要远程执行的方法的名称。另一种选择可以是:

message InputParameters{
    int32 serverId = 1;
    bool block = 2;
    double temperature = 3;
}
message Empty{

}
service ControlService{
    rpc control (InputParameters) returns (Empty);
}
Run Code Online (Sandbox Code Playgroud)

最好的方法是什么?或者至少使用一种方法而不是另一种方法的权衡是什么?

protocol-buffers zeromq

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

如何在grpc中正确设计发布-订阅模式?

我正在尝试使用grpc来实现pub sub模式,但是我对如何正确地做到这一点感到困惑。

我的原型: rpc call (google.protobuf.Empty) returns (stream Data);

客户:

asynStub.call(Empty.getDefaultInstance(), new StreamObserver<Data>() {
         @Override
         public void onNext(Data value) {
           // process a data

         @Override
         public void onError(Throwable t) {

         }

         @Override
         public void onCompleted() {

         }
       });

   } catch (StatusRuntimeException e) {
     LOG.warn("RPC failed: {}", e.getStatus());
   }

   Thread.currentThread().join();
Run Code Online (Sandbox Code Playgroud)

服务器服务:

public class Sender extends DataServiceGrpc.DataServiceImplBase implements Runnable {
  private final BlockingQueue<Data> queue;
  private final static HashSet<StreamObserver<Data>> observers = new LinkedHashSet<>();

  public Sender(BlockingQueue<Data> queue) {
    this.queue = queue;
  }

  @Override
  public …
Run Code Online (Sandbox Code Playgroud)

java publish-subscribe grpc

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

标签 统计

grpc ×1

java ×1

protocol-buffers ×1

publish-subscribe ×1

zeromq ×1