如何在MATLAB中访问GRPC服务器?

2022-02-28 00:00:00 grpc matlab java grpc-java microservices

我们已将DataAccess逻辑移动到Microservice,目前使用C++将其实现为GRPC,并且我们能够在C#客户端和C++客户端中利用它。

现在我们必须在Matlab客户端(旧版)中使用此DataAccess GRPC。因此,我试图找到一种从Matlab访问GRPC的方法,但发现没有对此的官方支持。

我找到了两个解决方案

使用Java

我已按照此thread中的建议进行了尝试。我已经使用Eclipse创建了一个sampleGRPC客户端java。但是,当我尝试从MATLAB访问该类/方法时,我面临以下问题

    Java exception occurred:
java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;CLjava/lang/Object;)V
        at io.grpc.Metadata$Key.validateName(Metadata.java:630)
        at io.grpc.Metadata$Key.<init>(Metadata.java:638)
        at io.grpc.Metadata$Key.<init>(Metadata.java:568)
        at io.grpc.Metadata$AsciiKey.<init>(Metadata.java:743)
        at io.grpc.Metadata$AsciiKey.<init>(Metadata.java:738)
        at io.grpc.Metadata$Key.of(Metadata.java:594)
        at io.grpc.Metadata$Key.of(Metadata.java:590)
        at io.grpc.internal.GrpcUtil.<clinit>(GrpcUtil.java:84)
        at io.grpc.internal.AbstractManagedChannelImplBuilder.<clinit>(AbstractManagedChannelImplBuilder.java:83)
        at io.grpc.netty.NettyChannelProvider.builderForAddress(NettyChannelProvider.java:37)
        at io.grpc.netty.NettyChannelProvider.builderForAddress(NettyChannelProvider.java:23)
        at io.grpc.ManagedChannelBuilder.forAddress(ManagedChannelBuilder.java:37)

讨论过here,它说这是不可能的。现在有没有人能告诉我这是否可能,或者我遗漏了什么?

使用Matlab协议编译器[Farsounder]

接下来,我尝试使用Farsounder解决方案v2.5.0创建基于this的存根文件。 只有在创建了Protoc.exe之后,我才意识到它是针对ProtoV2的。因此,我现在尝试使用Protov3Matlab。

但是构建说明在这里并不清楚,而且它有一个cmake文件,我不知道如何运行它。有没有人能帮我为Windows环境构建此软件?

我是Java和Matlab的新手,如果我错过了任何明显的东西,很抱歉。

提前感谢。


解决方案

我能够创建Protoc.exe。 步骤:

  1. 签出最新的协议缓冲区源代码。
  2. 已使用Farsounder MATLAB源代码和cmake文件更新源代码。
  3. 遵循https://github.com/protocolbuffers/protobuf/blob/master/cmake/README.md生成源。

相关文章