Springboot整合telemetry gPRC

发布于:2022-12-19 ⋅ 阅读:(146) ⋅ 点赞:(0)

前言:

  1.  本篇默认你设备端已配置完成telemetry
  2. 设备正常推送数据
  3. 服务器正常接收数据

步骤:

1. 引入pom

<dependency>
    <groupId>net.devh</groupId>
    <artifactId>grpc-server-spring-boot-starter</artifactId>
    <version>2.7.0.RELEASE</version>
</dependency>

2. 新增.properties配置

# 50050是设备向你服务器推送数据的端口。根据实际情况填写
grpc.server.port=50050

3. 新增proto文件夹和java、resource平级目录

cc694a5681f74e95808f23b3a5d70c66.png

* 把设备厂家提供的.porto文件拖进去

4. pom.xml增加proto的plugin

<plugin>
        <groupId>org.xolstice.maven.plugins</groupId>
        <artifactId>protobuf-maven-plugin</artifactId>
        <version>0.6.1</version>
        <configuration>
            <pluginId>grpc-java</pluginId>
            <protocArtifact>com.google.protobuf:protoc:3.0.2:exe:${os.detected.classifier}</protocArtifact>
            <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.2.0:exe:${os.detected.classifier}</pluginArtifact>
        </configuration>
        <executions>
            <execution>
                <goals>
                    <goal>compile</goal>
                    <goal>compile-custom</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

如遇${os.detected.classifier}无法解析等问题,可在maven的settings.xml中加入

<profiles>
    <profile>
    <id>os-properties</id>
    <properties>
        <!--Linux-->
        <!--<os.detected.name>linux</os.detected.name>
        <os.detected.arch>x86_64</os.detected.arch>
        <os.detected.classifier>linux-x86_64</os.detected.classifier>
        -->
        <!--Windows-->
        <os.detected.classifier>windows-x86_64</os.detected.classifier>
    </properties>
    </profile>
</profiles>

5. 根据porto文件自动生成Java代码

如下图所示,执行1、2步

844f514b85474c68bf46f49448ae7eec.png

 顺利的话会在target下生产如下Java代码(.porto文件不同,生成的java代码会有差异)

d85240485a25448387215918e390138e.png

6. 写service(根据你的.porto文件具体实现,基本都是继承 ***ImplBase方法)

package com.demo.telemetry.service;

import grpc_dialout.GRPCDialoutGrpc;
import grpc_dialout.GrpcDialout;
import io.grpc.stub.StreamObserver;
import lombok.extern.slf4j.Slf4j;
import net.devh.boot.grpc.server.service.GrpcService;

/**
 *
 * 根据你的.porto文件具体实现,基本都是继承 ***ImplBase方法
 */
@GrpcService
@Slf4j
public class DeviceGRPCService extends GRPCDialoutGrpc.GRPCDialoutImplBase {


    /**
     * @param responseObserver
     * @return
     */
    @Override
    public StreamObserver<GrpcDialout.DialoutMsg> dialout(StreamObserver<GrpcDialout.DialoutResponse> responseObserver) {
        return new StreamObserver<GrpcDialout.DialoutMsg>() {
            @Override
            public void onNext(GrpcDialout.DialoutMsg dialoutMsg) {
                try {
                    // 这里会获取到设备推送的数据
                    log.info("====================>dialoutMsg:" + dialoutMsg);
                } catch (Exception e) {
                    log.error("dataPublish onNext:" + e);
                }
            }

            @Override
            public void onError(Throwable throwable) {
                System.out.println("saveUsers error " + throwable.getMessage());
                log.info("saveUsers error " + throwable.getMessage());
            }

            @Override
            public void onCompleted() {
                responseObserver.onCompleted();
            }
        };
    }

}

7. end
请将此项目打包发布到设备推送到的那台服务器上 看log是否接收到数据

如果未接收到数据,请在服务器上执行 tcpdump -i ens192 port 50050 进行确认
- ens192 是你的网卡 (修改成自己的)
- 50050 是telemetry那台设备推送到你服务器的端口(修改成自己的)

友情提示:服务器防火墙记得打开

--------------------------------------------------------------------------

* 如果需要源码,可以私我~如接入遇到问题,一起沟通探讨~


网站公告

今日签到

点亮在社区的每一天
去签到