gRPC结合nacos学习,实现远程调用grpc服务

gRPC结合nacos学习

1.1 基本概念

1.1.1 gRPC核心设计思路

对于远程调用的的设计思路,一般都是以下四个方面:

  1. 网络通信:gRPC 自己封装网络通信的部分,并提供多种语言的封装(C、Java[Netty]、GO).
  2. 协议:gRPC 使用 HTTP2 传输数据(二进制数据内容),支持双工(双向流)连接的多路复用.
  3. 序列化:基于 Protobuf 的序列化方式,时间效率和空间效率都是 JSON 的 3~5 倍.
  4. 代理的创建:让调用者像调用本地方法一样,去调用远端的服务方法.
1.1.2 为什么使用gRPC
  1. 高效:基于 HTTP2 协议,传输二进制数据内容,又基于 Protobuf 实现序列化,高效的进行进程间通信.
  2. 支持多种语言:原生支持 C、GO、Java 实现。C语言版本上可扩展 C++、C#、NodeJS、Python、Ruby、PHP.
  3. 跨平台:支持多平台运行 linux、Android、IOS、MacOS、Windows.

1.2 HTTP2.0 协议

  • 二进制通信:HTTP2.0 协议是一个二进制协议,效率高于 HTTP1.x,但是可读性较差.
  • 实现双工通信:服务器可对客户端进行消息推送.
  • 实现了多路复用机制:一个连接可以请求多个数据.

具体的通信过程,首先 HTTP2.0 协议以下三个重要概念:

  1. 数据流(Stream):客户端和服务器之间传输数据的通道(一个连接中可以有多个数据流).
  2. 消息(message):一个消息中就包含了多个帧.
  3. 帧(frame):就是一些具体的请求头,请求体信息.

1.3、Protocol Buffers(Protobuf)

1.3.1、protobuf 定义

protobuf 是一种与编程语言无关,与具体平台无关(任意操作系统)的序列化工具,自定义了中间语言(IDL),使得数据在 client 和 server 中进行 RPC 传输.

在这里插入图片描述

api的开发
  1. .proto文件 书写protobuf的IDL
  2. [了解]protoc命令 把proto文件中的IDL 转换成编程语言
    protoc --java_out=/xxx/xxx /xxx/xxx/xx.proto
syntax = "proto3";

option java_multiple_files = false;
option java_package = "com.grpc.hello";
option java_outer_classname = "HelloProto";

service HelloService {
  rpc hello(HelloRequest) returns(HelloResponse) {};
}

message HelloRequest {
  string name = 1;
}

message HelloResponse {
  string result = 1;
}
pom.xml
 <dependencies>
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-netty-shaded</artifactId>
            <version>1.52.1</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-protobuf</artifactId>
            <version>1.52.1</version>
        </dependency>
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-stub</artifactId>
            <version>1.52.1</version>
        </dependency>
        <dependency> <!-- necessary for Java 9+ -->
            <groupId>org.apache.tomcat</groupId>
            <artifactId>annotations-api</artifactId>
            <version>6.0.53</version>
            <scope>provided</scope>
        </dependency>
 </dependencies>

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

service服务端开发
  1. 实现业务接口 添加具体的功能

  2. 创建服务端 (Netty)

	/*
        1.接受client提交的参数 request.getParameter()
        2.业务处理 service——dao 调用对应的业务功能
        3.提供返回值
     */
    @Override
    public void hello(com.grpc.hello.HelloProto.HelloRequest request,
                      io.grpc.stub
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值