You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Java测试套件调用AWS EKS上容器化部署的gRPC微服务?

Java调用AWS EKS容器化gRPC微服务示例

前置准备

  • 确保本地已通过protoc配合gRPC Java插件生成目标gRPC服务对应的Java客户端代码
  • 确认EKS上的gRPC服务已暴露可访问端点(如LoadBalancer外部IP+端口、NodePort节点IP+端口,若用Ingress需确保控制器支持HTTP/2)

核心实现示例

Maven依赖配置

在pom.xml中添加gRPC核心依赖:

<dependencies>
    <!-- gRPC核心依赖 -->
    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-netty-shaded</artifactId>
        <version>1.60.0</version>
    </dependency>
    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-protobuf</artifactId>
        <version>1.60.0</version>
    </dependency>
    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-stub</artifactId>
        <version>1.60.0</version>
    </dependency>
    <!-- 可选:TLS连接支持,若服务启用HTTPS -->
    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-alts</artifactId>
        <version>1.60.0</version>
    </dependency>
</dependencies>

基础gRPC客户端调用代码

假设目标gRPC服务定义了HelloService,包含SayHello方法:

import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import com.yourpackage.proto.HelloServiceGrpc;
import com.yourpackage.proto.HelloRequest;
import com.yourpackage.proto.HelloResponse;

public class GrpcEksTestClient {
    public static void main(String[] args) {
        // EKS上gRPC服务的访问地址(替换为实际端点)
        String serviceTarget = "eks-grpc-demo.example.com:50051";

        // 创建gRPC通道
        ManagedChannel channel = ManagedChannelBuilder.forTarget(serviceTarget)
                // 未启用TLS时使用该配置,启用则替换为useTransportSecurity()
                .usePlaintext()
                .build();

        try {
            // 创建阻塞式服务存根(也可使用异步存根支持非阻塞调用)
            HelloServiceGrpc.HelloServiceBlockingStub serviceStub = HelloServiceGrpc.newBlockingStub(channel);

            // 构造请求参数
            HelloRequest request = HelloRequest.newBuilder()
                    .setName("Test Automation Suite")
                    .build();

            // 发起RPC调用并获取响应
            HelloResponse response = serviceStub.sayHello(request);
            System.out.println("Received gRPC response: " + response.getMessage());
        } finally {
            // 关闭通道释放资源
            channel.shutdown();
        }
    }
}

TLS加密连接配置(若服务启用HTTPS)

如果EKS上的gRPC服务启用了TLS,修改通道构建逻辑:

import java.io.File;

// ... 其余代码省略
ManagedChannel channel = ManagedChannelBuilder.forTarget(serviceTarget)
        .useTransportSecurity()
        // 若使用自签名证书,指定CA证书路径
        .trustManager(new File("/path/to/ca-cert.pem"))
        .build();

关键注意事项

  • 确保EKS集群安全组允许测试套件所在网络访问gRPC服务端口
  • 若用Ingress暴露服务,需确认Ingress控制器支持HTTP/2(如AWS ALB Ingress需配置alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]'等注解)
  • 自动化测试场景下建议复用ManagedChannel,避免频繁创建销毁通道以提升性能

内容的提问来源于stack exchange,提问作者Bipin Kumar Chaurasia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 07:20:36