Java转go第6阶段

前言

本阶段开始微服务的学习

我的项目地址

学习经过

学习总结

1 gRPC简单demo

环境准备

前往protobuf官方下载并安装protobuf将它配置进环境变量中(一个自动转换将proto代码生成对应格式代码的工具)
然后新建项目下载依赖的包

go get github.com/golang/protobuf/proto
go get google.golang.org/grpc
go install github.com/golang/protobuf/protoc-gen-go

我的目录结构,下面用到的都是duo开头的
在这里插入图片描述

编写protobuf文件

我这里直接跳过单个服务,从多服务开始,因为感觉没太大差别。
如果用goland进行编写正常会捆绑插件,能识别proto格式让它变色,但如果没有可以自己下一下插件,阅读起来方便点

duo_service.proto

syntax = "proto3"; // 指定proto版本
// 指定golang包名
option go_package = "/duo_proto";

// 定义服务
service VideoService {
//定义方法
  rpc Look(Request)returns(Response){}
}

service OrderService {
  rpc Buy(Request)returns(Response){}
}

// 定义请求和响应
message Request{
//这里的1并不是赋值,而是表示字段的顺序序号,应该是在数据传输的编解码时有用
  string name = 1;
}

message Response{
  string name = 1;
}

proto文件的语法非常简单,如果向了解系统点可以去看我的学习经过中第三个视频。其他的只需要知道service定义服务、rpc定义方法、message定义结构体。其余的代码一般变动不大,包名自己改改,多试几次体会一下就明白了。

在命令行里面输入命令生成pb.go文件

protoc -I . --go_out=.\proto --go-grpc_out=.\proto .\proto\duo_service.proto

这段命令中–go_out和–go-grpc_out是要生成什么文件
.\proto是生成文件存放的路径,如果是.的话代表命令行打开的当前路径下
最后的.\proto\duo_service.proto代表作为生成依据的proto文件的路径

之后会生成两个文件duo_service_grpc.pb.go和duo_service.pb.go,代码不放了,反正如果用我的proto文件生成出来的都一模一样,这两个文件前者定义了grpc服务与方法,后者定义了请求与响应的结构体用于数据传输的编解码。

服务端代码

duo_service.go

就不单独解释了,注释里面都解释明白了

package main

import (
	"context"
	"fmt"
	"gRPC-demo/proto/duo_proto"
	"google.golang.org/grpc"
	"net"
)

// 结构体叫什么无所谓但需要实现接口的方法
type OrderServer struct {
	// 在高版本proto生成时会生成UnimplementedOrderServiceServer结构体,它实现了所有服务的空方法,
	// 所以你的结构体继承了这个结构体,当访问没有实现的方法时,会调用空方法,返回错误方法未实现
	duo_proto.UnimplementedOrderServiceServer
}

func (s *OrderServer) Buy(ctx context.Context, req *duo_proto.Request) (*duo_proto.Response, error) {
	fmt.Println("服务端收到请求:" + req.Name)
	return &duo_proto.Response{Name: "buy " + req.Name}, nil
}

type VideoServer struct {
	duo_proto.UnimplementedVideoServiceServer
}

func (s *VideoServer) Look(ctx context.Context, req *duo_proto.Request) (*duo_proto.Response, error) {
	fmt.Println("服务端收到请求:" + req.Name)
	return &duo_proto.Response{Name: "look " + req.Name}, nil
}

func main() {
	// 监听端口9090
	listen, err := net.Listen("tcp", ":9090")
	if err != nil {
		panic(err)
	}
	// 创建一个grpc服务器
	grpcServer := grpc.NewServer()

	// 注册服务
	duo_proto.RegisterOrderServiceServer(grpcServer, &OrderServer{})
	duo_proto.RegisterVideoServiceServer(grpcServer, &VideoServer{})

	// 启动grpc服务器
	err = grpcServer.Serve(listen)
	if err != nil {
		panic(err)
	}
}

客户端代码

package main

import (
	"context"
	"fmt"
	"gRPC-demo/proto/duo_proto"
	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials/insecure"
	"time"
)

func main() {
	// 设置带超时的上下文
	ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
	defer cancel()

	//conn, err := grpc.Dial("localhost:9090", grpc.WithTransportCredentials(insecure.NewCredentials()))
	//conn, err := grpc.DialContext(ctx, "localhost:8080", grpc.WithInsecure())
	//上面两种方法被弃用,但目前仍可使用
	conn, err := grpc.NewClient("localhost:9090", grpc.WithTransportCredentials(insecure.NewCredentials()))
	if err != nil {
		panic(err)
	}
	defer conn.Close()

	// 创建一个grpc客户端
	orderClient := duo_proto.NewOrderServiceClient(conn)
	videoClient := duo_proto.NewVideoServiceClient(conn)

	orderResp, err := orderClient.Buy(ctx, &duo_proto.Request{Name: "苹果"})
	if err != nil {
		panic(err)
	}
	fmt.Println(orderResp.Name)
	videoResp, err := videoClient.Look(ctx, &duo_proto.Request{Name: "电影"})
	if err != nil {
		panic(err)
	}
	fmt.Println(videoResp.Name)
}

2 docker安装

我的环境与建议

先说明我的电脑环境我是Windows10系统在这里插入图片描述
在开始之前给大家一些建议,首先我只安装过一次,我说的肯定只是我的个人经验,你需要多看些博客看看别人的安装经验,另外不要完全按照ai的来,ai给的安装步骤未必完全适合你,在安装之前你需要多看看别人的经验,不要让自己的眼睛看的太窄了。

需要安装哪些东西

  • 首先你需要有能够科学上网的方法
  • 你需要下载wsl2
  • 你需要打开电脑的虚拟化以及hyper-v(这个我不确定,虽然我跟着开了)
  • 你需要用wsl下载一个Linux系统比如乌班图
  • 你需要安装docker desktop

hyper-v的开启

开启hyper-v
这个我没踩什么坑,所以也不知道有没有用,直接看别人的文章跟着做就是

wsl2的下载

这里我踩了一个卡了我特别旧的坑,我起初是下载的豆包给我的链接,结果后来我才知道,那个版本低了,我一直docker引擎启动失败。
1 首先用管理员身份用PowerShell运行以下命令

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

这两个好像是启动了系统的什么配置,启用 Windows 子系统(WSL)功能,启用虚拟机平台功能

下载wsl2,去官网下载最新版。
如果你不幸跟我一样下了不是最新版的也可以直接去官网下载,网络更为稳定,不会像命令行一样容易失败

设置wsl的默认版本为wsl2

wsl --set-default-version 2

乌班图下载

我是跟着这个博客下载的,他是完全使用的命令行进行的解压安装啥的,我之间命令行出了个错,但手动解压也没遇到什么问题

docker desktop下载

这里我踩了坑ai告诉我中间有自定义安装路径的界面,结果我安装完也没看到,安在了C盘。然后我被迫卸载重新安装了。

想要安装在其他盘需要使用命令行的方式进行安装
首先在D盘新建Docker目录,然后将安装包剪切到该文件夹使用管理员权限打开该目录的命令行,用以下代码安装:

"Docker Desktop Installer.exe" install --install-dir="PATH"

其中PATH替换为你想要安装的路径,例如"D:\Program\Docker"。

然后顺着一路点就能下载下来了

进来以后登录注册一下

更改镜像默认保存路径
在这里插入图片描述
更改镜像源
在这里插入图片描述

{
  "registry-mirrors": [
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://cr.console.aliyun.com",
    "https://mirror.ccs.tencentyun.com",
    "https://docker.1ms.run",
    "https://docker.xuanyuan.me"
  ]
}

如果出现了engine stopped的情况这些配置都是无法配置成功的,记得配置完重启,而engine stopped往往是由于wsl需要更新导致的,反正我的是这个原因,其他的可以看这个博客逐步排查一下

安装成功

我们可以在命令行里面输入以下命令,检查安装是否成功

docker run hello-world

在这里插入图片描述

总结

其实还有docker的使用,但最近有点忙,以后在补,更新也暂停一段时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值