Skip to the content.

入门指南

<- 返回索引

本节讨论如何让 Spring 连接到 gRPC 服务端并管理您的连接。

目录

附加主题

项目创建

在我们开始添加依赖关系之前,让我们项目的一些设置建议开始。

项目创建

我们建议将您的项目分为2至3个不同的模块。

  1. interface 项目 包含原始 protobuf 文件并生成 java model 和 service 类。 你可能会在不同的项目中会共享这个部分。
  2. Server 项目 包含项目的业务实现,并使用上面的 Interface 项目作为依赖项。
  3. Client 项目(可选,可能很多) 任何使用预生成的 stub 来访问服务器的客户端项目。

依赖项

接口项目

请参阅 服务端入门指引 页面

服务端项目

请参阅 服务端入门指引 页面

客户端项目

Maven (客户端)

    <dependencies>
        <dependency>
            <groupId>net.devh</groupId>
            <artifactId>grpc-client-spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>example</groupId>
            <artifactId>my-grpc-interface</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

Gradle (客户端)

apply plugin: 'org.springframework.boot'

dependencies {
    compile('org.springframework.boot:spring-boot-starter')
    compile('net.devh:grpc-client-spring-boot-starter')
    compile('my-example:my-grpc-interface')
}

buildscript {
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

使用 Stubs 连接服务端

本节假定您已经定义并生成了Protobuf

解释客户端组件

以下列表包含您可能在客户端使用到的的所有功能。 如果您不想使用任何高级功能,那么前两个元素可能都是您需要使用的。

访问客户端

我们建议对 (@GrpcClient) Stub 做注入,而不是 Channel

注意: 存在不同类型的 Stub。 并非所有的都支持所有请求类型 (流式调用)。

import example.HelloRequest;
import example.MyServiceGrpc.MyServiceBlockingStub;

import net.devh.boot.grpc.client.inject.GrpcClient;

import org.springframework.stereotype.Service;

@Service
public class FoobarService {

    @GrpcClient("myService")
    private MyServiceBlockingStub myServiceStub;

    public String receiveGreeting(String name) {
        HelloRequest request = HelloRequest.newBuilder()
                .setName(name)
                .build();
        return myServiceStub.sayHello(request).getMessage();
    }

}

你也可以随时用@GrpcClientBean@Configuration注入存根,以便在其他服务中更广泛地使用。

注意:我们建议在整个应用程序中使用@GrpcClientBean或用@GrpcClient注释的字段,因为这两者的混合使用可能会给未来的开发者带来混乱。

@Configuration
@GrpcClientBean(
    clazz = TestServiceGrpc.TestServiceBlockingStub.class,
    beanName = "blockingStub",
    client = @GrpcClient("test")
)
public class YourCustomConfiguration {

    @Bean
    FoobarService foobarService(@Autowired TestServiceGrpc.TestServiceBlockingStub blockingStub) {
        return new FoobarService(blockingStub);
    }

}

@Service
@AllArgsConsturtor
public class FoobarService {

    private TestServiceBlockingStub blockingStub;

    public String receiveGreeting(String name) {
        HelloRequest request = HelloRequest.newBuilder()
                .setName(name)
                .build();
        return blockingStub.sayHello(request).getMessage();
    }

}

附加主题


<- 返回索引