欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Go微服務(wù)實(shí)戰(zhàn)

概要

用戶服務(wù)基本是每個(gè)互聯(lián)網(wǎng)產(chǎn)品里必備的一個(gè)服務(wù)了,因?yàn)闆]有用戶基本是什么也干不了。所以他的重要性不言而喻。本文主要介紹下如何開發(fā)一個(gè)用戶微服務(wù),以及他的詳細(xì)開發(fā)流程。

為容縣等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及容縣網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、容縣網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

目錄

  • Go微服務(wù)實(shí)戰(zhàn) - 從0到1搭建一個(gè)類Instagram應(yīng)用(持續(xù)更新)
  • Go微服務(wù)實(shí)戰(zhàn) - 用戶服務(wù)(gRPC+Protocol Buffer)
  • Go微服務(wù)實(shí)戰(zhàn) - 關(guān)系服務(wù)服務(wù)(gRPC+Protocol Buffer)
  • Go微服務(wù)實(shí)戰(zhàn) - 動(dòng)態(tài)服務(wù)(gRPC+Protocol Buffer)
  • Go微服務(wù)實(shí)戰(zhàn) - 聚合服務(wù)(http)

調(diào)用流程圖

技術(shù)棧

  • Go
  • Eagle 開發(fā)框架
  • Redis
  • MySQL
  • Gorm
  • docker
  • kubernetes

接口開發(fā)

使用proto方式定義,主要包含以下接口

開發(fā)步驟

這里詳細(xì)的記錄了開發(fā)的步驟,方便參看本項(xiàng)目的同學(xué)知道其實(shí)現(xiàn)過程。

1、生成proto模板文件

eagle proto add api/user/v1/user.proto

內(nèi)容如下

syntax = "proto3";

package api.user.v1;

option go_package = "github.com/go-microservice/user-service/api/user/v1;v1";
option java_multiple_files = true;
option java_package = "api.user.v1";

service UserService {
	rpc CreateUser (CreateUserRequest) returns (CreateUserReply);
	rpc UpdateUser (UpdateUserRequest) returns (UpdateUserReply);
	rpc DeleteUser (DeleteUserRequest) returns (DeleteUserReply);
	rpc GetUser (GetUserRequest) returns (GetUserReply);
	rpc ListUser (ListUser1Request) returns (ListUserReply);
}

message CreateUser1Request {}
message CreateUser1Reply {}

message UpdateUserRequest {}
message UpdateUserReply {}

message DeleteUserRequest {}
message DeleteUserReply {}

message GetUserRequest {}
message GetUserReply {}

message ListUserRequest {}
message ListUserReply {}

2、為proto填充業(yè)務(wù)方法及字段定義

vim api/user/v1/user.proto

3、生成pb文件

# 生成所有proto
make grpc

# 或者
# 生成指定proto的pb文件
eagle proto client api/user/v1/user.proto

# Output
ll api/user/v1/
user.pb.go #新增
user.proto
user_grpc.pb.go #新增

會(huì)生成兩個(gè)文件 api/user/v1/user.pb.goapi/user/v1/user.pb.go

4、生成server骨架代碼

# 生成骨架代碼
eagle proto server api/user/v1/user.proto

# 默認(rèn)會(huì)輸出到 internal/service
# 如果需要指定到對(duì)應(yīng)的目錄,可以使用 -t 參數(shù), eg: 
# eagle proto server -t internal/logic

# 查看
internal/service/user_svc.go

5、注冊(cè)服務(wù)到gRPC Server

// internal/server/grpc.go 

import (
		...
		v1 "github.com/go-microservice/user-service/api/user/v1"
		...
)

...

// NewGRPCServer creates a gRPC server
func NewGRPCServer(
	cfg *app.ServerConfig,
	// 新增
	svc *service.UserServiceServer, 
) *grpc.Server {

	grpcServer := grpc.NewServer(
		grpc.Network("tcp"),
		grpc.Address(cfg.WriteTimeout),
		grpc.Timeout(cfg.WriteTimeout),
	)

	// register biz service
	// 新增
	v1.RegisterUserServiceServer(grpcServer, svc)

	return grpcServer
}

6、在生成的server中編寫業(yè)務(wù)邏輯

// vim internal/service/user_svc.go

package service

import (
	"context"

	pb "github.com/go-microservice/moment-service/api/user/v1"
)

var (
	_ pb.UserServiceServer = (*UserServiceServer)(nil)
)

type UserServiceServer struct {
	pb.UnimplementedUserServiceServer
}

func NewUserServiceServer() *UserServiceServer {
	return &UserServiceServer{
}
}

func (s *UserServiceServer) CreateUser(ctx context.Context, req *pb.CreateUserRequest) (*pb.CreateUserReply, error) {

	return &pb.CreateUserReply{}, nil
}
func (s *UserServiceServer) UpdateUser(ctx context.Context, req *pb.UpdateUserRequest) (*pb.UpdateUserReply, error) {
	return &pb.UpdateUserReply{}, nil
}
func (s *UserServiceServer) DeleteUser(ctx context.Context, req *pb.DeleteUserRequest) (*pb.DeleteUserReply, error) {
	return &pb.DeleteUserReply{}, nil
}
func (s *UserServiceServer) GetUser(ctx context.Context, req *pb.GetUserRequest) (*pb.GetUserReply, error) {
	return &pb.GetUserReply{}, nil
}
func (s *UserServiceServer) ListUser(ctx context.Context, req *pb.ListUserRequest) (*pb.ListUserReply, error) {
	return &pb.ListUserReply{}, nil
}

后面就可以在這里補(bǔ)充具體的業(yè)務(wù)邏輯處理了。

7、啟動(dòng)服務(wù)

# 在根目錄下運(yùn)行
go run main.go

確保運(yùn)行g(shù)RPC server

// main.go

...
eagle.WithServer(
	// init gRPC server
	gs,
),
...

8、接口調(diào)試

調(diào)試工具,這里使用 [grpcurl](https://github.com/fullstorydev/grpcurl)

# 查看服務(wù)列表
grpcurl -plaintext localhost:9090 list

# Output
api.user.v1.UserService
grpc.health.v1.Health
grpc.reflection.v1alpha.ServerReflection

# 訪問列表
grpcurl -plaintext -d '{"user_id":2}' localhost:9090 api.user.v1.UserService/ListUser

參數(shù)說明

  • -d 提交的參數(shù), json格式
  • -plaintext 使用純文本連接,跳過TLS

也可以使用以下工具進(jìn)行本地測(cè)試

  • postman: 新版本的postman 也支持gRPC(beta版)調(diào)試

  • grpucui: https://github.com/fullstorydev/grpcui

    # 開啟UI界面調(diào)試窗口
    grpcui -plaintext localhost:9090
    

部署

兩種部署方式

  • docker
  • k8s (本地部署可以使用minikube)

部署步驟

  • 構(gòu)建docker鏡像

    docker build -t user-service:v1.0.0 -f deploy/docker/Dockerfile .
    
  • 打docker tag

    docker tag user-service:v1.0.0 qloog/user-service:v1.0.0
    
  • push tag 到 docker hub

    docker push qloog/user-service:v1.0.0
    
  • 部署到k8s

    kubectl apply -f deploy/k8s/go-deployment.yaml
    kubectl apply -f deploy/k8s/go-service.yaml
    

以上命令都是一步一步執(zhí)行的,為了方便期間,這里也提供了一件部署腳本,執(zhí)行如下

sh deploy/deploy.sh

項(xiàng)目源碼

最終源碼在這里:https://github.com/go-microservice/user-service

完結(jié)

到此,開發(fā)、測(cè)試、部署已經(jīng)操作完了,后面會(huì)繼續(xù)完善鏈路追蹤和監(jiān)控相關(guān)的部分。

感謝閱讀, 祝大家 Happy coding~

當(dāng)前題目:Go微服務(wù)實(shí)戰(zhàn)
網(wǎng)頁網(wǎng)址:http://chinadenli.net/article28/dsoiccp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、App設(shè)計(jì)品牌網(wǎng)站建設(shè)、建站公司、企業(yè)網(wǎng)站制作、網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)