目录
目录README.md

PCG-第一次作业

软件92 易俊泉

基本题目

请基于//gen目录下的桩代码,基于自己熟悉的程序语言开发对应的服务端程序和客户端程序。

基本要求: 服务端程序提供PutPet、GetPet、DeletePet三个接口,客户端访问这三个服务进行宠物数据的写入、查询和删除操作。

扩展要求: 创建镜像和yaml文件基于minikube部署

完成情况

  • 基本要求
  • 扩展要求

文件目录

主要文件的目录结构如下:

D:.
│  deploy.yaml
│  gRPC.md
│  README.md
├─client
│  │  Client_Java.md
│  ├─.idea
│  ├─src
│  │  └─main
│  │      ├─java
│  │      │  │  PetClient.java
├─deploy-client
│      client-0.0.1-SNAPSHOT.jar
│      Dockerfile
├─go_client_test
│      gotest.go
├─proto
│  │  buf.yaml
│  │
│  ├─google
│  │  └─type
│  │          datetime.proto
│  │
│  └─pet
│      └─v1
│              pet.proto
│
└─server
    │  Dockerfile
    │  server.go
    │  Server_Go.md

server.go : 服务端用go实现

PetClient.java : 客户端用java实现

gotest.go : 客户端测试用go实现

操作指南

  • 客户端使用Java,镜像制作请参考:Client_Java.md

  • 服务端使用Go,镜像制作请参考:Server_Go.md

  • 有关gRPC的原理与使用,请参考:gRPC.md

快速开始

基于源码方式

环境:

  • jdk:11
  • golang:go1.19 windows/amd64
  1. 运行服务端:进入server\server.go所在目录,运行go run server.go,有如下欢迎界面即为成功
    2022/10/22 00:23:18 gRPC服务端启动成功:8088!
    2022/10/22 00:23:18 
     ██████╗ ██████╗ ██████╗  ██████╗
    ██╔════╝ ██╔══██╗██╔══██╗██╔════╝
    ██║  ███╗██████╔╝██████╔╝██║     
    ██║   ██║██╔══██╗██╔═══╝ ██║     
    ╚██████╔╝██║  ██║██║     ╚██████╗
     ╚═════╝ ╚═╝  ╚═╝╚═╝      ╚═════╝
  2. 运行服务端:进入client\src\main\java\PetClient.java所在目录,运行该程序,进入欢迎界面

    00:24:19.641 [main] INFO  PetClient -
    Start your travel to gRPC!
    
    00:24:19.655 [main] INFO  PetClient - 192.168.114.1
    00:24:19.655 [main] INFO  PetClient -
     ██████╗ ██████╗ ██████╗  ██████╗
    ██╔════╝ ██╔══██╗██╔══██╗██╔════╝
    ██║  ███╗██████╔╝██████╔╝██║
    ██║   ██║██╔══██╗██╔═══╝ ██║
    ╚██████╔╝██║  ██║██║     ╚██████╗
     ╚═════╝ ╚═╝  ╚═╝╚═╝      ╚═════╝
    
    00:24:20.006 [main] INFO  PetClient - 
    Please choose what you want to do:
    Enter 1 : put pet.
    Enter 2 : get pet by id.
    Enter 3 : delete pet by id.
  3. 键盘输入1,进入PUT模式

    • 输入宠物类型

      00:25:46.521 [main] INFO  PetClient - 
      Please input the PetType(a number):
      0: UNSPECIFIED
      1: CAT
      2: DOG
      3: SNAKE
      4: HAMSTER
      -1: UNRECOGNIZED
      1
    • 输入名字

      00:28:01.752 [main] INFO  PetClient - 
      Please input the name(e.g petty):
      tom
    • 得到结果,保存id,便于接下来测试使用

      00:28:25.459 [main] INFO  PetClient - 
      The pet is successfully put:
      pet_type: PET_TYPE_CAT
      pet_id: "630b9024-515d-11ed-91de-5405db4d0f35"
      name: "tom"
      created_at {
        year: 2022
        month: 10
        day: 22
        minutes: 28
        seconds: 25
        nanos: 397625100
      }
  4. 选择不退出

    00:28:25.460 [main] INFO  PetClient - 
    Do you want to exit ? : y/n
    n
  5. 进入GET模式

    00:29:03.039 [main] INFO  PetClient - 
    Please choose what you want to do:
    Enter 1 : put pet.
    Enter 2 : get pet by id.
    Enter 3 : delete pet by id.
    2
  6. 输入id630b9024-515d-11ed-91de-5405db4d0f35,获得宠物信息

    00:30:49.676 [main] INFO  PetClient - 
    The pet is successfully gotten:
    pet_type: PET_TYPE_CAT
    pet_id: "630b9024-515d-11ed-91de-5405db4d0f35"
    name: "tom"
    created_at {
      year: 2022
      month: 10
      day: 22
      minutes: 28
      seconds: 25
      nanos: 397625100
    }
  7. 选择不退出

  8. 进入DELETE模式

    00:29:03.039 [main] INFO  PetClient - 
    Please choose what you want to do:
    Enter 1 : put pet.
    Enter 2 : get pet by id.
    Enter 3 : delete pet by id.
    3
  9. 输入id630b9024-515d-11ed-91de-5405db4d0f35,删除宠物

  10. 退出系统

    00:32:59.593 [main] INFO  PetClient -
    Do you want to exit ? : y/n
    y

基于镜像方式

由于本人对k8s掌握不是很熟练,所以仅仅将两个容器放在一个pod中,便于端口访问

服务端也没有进行交互,仅仅测试一下gRPC的正常使用与部署正确

  1. 启动Docker

  2. 启动minikube

    minikube start
  3. 进入主目录,运行deploy.yaml配置文件

    kubectl apply -f deploy.yaml    
    
    # deploy.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: grpc-deployment #要创建的 deployment 的名字
    spec:
      selector: #deployment资源和pod资源关联的方式
        matchLabels:
          app: grpc
      template:
        metadata:
          labels:
            app: grpc
        spec:
          containers:
            - image: yijunquan/grpc-client:v1.0.0
              name: grpc-client-container #容器名称
              ports:
                - name: http
                  protocol: TCP
                  containerPort: 19090
            - image: yijunquan/grpc-server:v1.0.0
              name: grpc-server-container #容器名称
              ports:
                - name: grpc
                  protocol: TCP
                  containerPort: 8088
  4. 查看pods

    kubectl get pods kubectl get pods
    NAME                               READY   STATUS     RESTARTS     AGE
    grpc-deployment-58b6988fff-c7rwx   1/2     NotReady   1 (6s ago)   9s
  5. 根据pod名字查看运行结果

    kubectl logs grpc-deployment-58b6988fff-c7rwx
  • 欢迎界面

    00:07:05.871 [main] INFO  PetClient -
    Start gRPC client !
    
    00:07:05.872 [main] INFO  PetClient -
     ██████╗ ██████╗ ██████╗  ██████╗
    ██╔════╝ ██╔══██╗██╔══██╗██╔════╝
    ██║  ███╗██████╔╝██████╔╝██║
    ██║   ██║██╔══██╗██╔═══╝ ██║
    ╚██████╔╝██║  ██║██║     ╚██████╗
     ╚═════╝ ╚═╝  ╚═╝╚═╝      ╚═════╝
  • 测试PUT功能

    00:07:06.173 [main] INFO  PetClient -
    Test pet PUT function
    00:07:06.173 [main] INFO  PetClient -
    Put the first pet .......
    00:07:06.173 [main] INFO  PetClient -
    PetType: cat
    00:07:06.173 [main] INFO  PetClient -
    PetName: Tom
    00:07:06.174 [main] INFO  PetClient -
     Start to put by using gRPC ......
    00:07:06.469 [main] INFO  PetClient -
    The pet is successfully put:
    68bba956-515a-11ed-b274-0242ac110002
  • 测试GET功能

    00:07:06.473 [main] INFO  PetClient -
    Test pet GET function
    00:07:06.474 [main] INFO  PetClient -
    Get pet by id 68c099f0-515a-11ed-b274-0242ac110002
    00:07:06.588 [main] INFO  PetClient -
    The pet is successfully gotten:
    pet_type: PET_TYPE_DOG
    pet_id: "68c099f0-515a-11ed-b274-0242ac110002"
    name: "wang"
    created_at {
      year: 2022
      month: 10
      day: 21
      hours: 16
      minutes: 7
      seconds: 6
      nanos: 471270500
    }
  • 测试DELETE功能

    00:07:06.588 [main] INFO  PetClient -
    Test pet DELETE function
    00:07:06.588 [main] INFO  PetClient -
    Get pet by id 68bba956-515a-11ed-b274-0242ac110002
    00:07:06.594 [main] INFO  PetClient -
    The pet is successfully deleted!
关于

菁英班第一次小作业

62.1 MB
邀请码