>  기사  >  백엔드 개발  >  Go-Micro 개발 환경을 설정하는 방법

Go-Micro 개발 환경을 설정하는 방법

藏色散人
藏色散人앞으로
2020-08-12 13:58:503013검색

에 Go-Micro 개발 환경 구축 방법을 소개하고 있으니, 필요한 친구들에게 도움이 되었으면 좋겠습니다!

최근에 go-micro를 사용해야 해서 마이크로서비스에 대해 배우고 있는 글입니다. Go-Micro 개발 환경을 설정하는 방법

설치 환경

micro는 go-micro를 사용하기 전에 설치해야 하는 런타임을 제공합니다.

소스코드를 설치하는 방법은 여러가지가 있습니다

go get github.com/micro/micro/v2

이 방법으로는 설치할 수 없습니다. 네트워크 문제가 아닌데 어디서 충돌이 일어나는지 모르겠습니다. . .

docker
docker pull micro/micro

Binary

# MacOS
curl -fsSL https://raw.githubusercontent.com/micro/micro/master/scripts/install.sh | /bin/bash

# Linux
wget -q  https://raw.githubusercontent.com/micro/micro/master/scripts/install.sh -O - | /bin/bash

# Windows
powershell -Command "iwr -useb https://raw.githubusercontent.com/micro/micro/master/scripts/install.ps1 | iex"

이런 식으로 컴파일된 바이너리 패키지를 다운로드하여 설치하는 것이 좋습니다. 환경 변수에 추가하면 바로 사용할 수 있습니다. 스크립트를 사용하여 설치하지 않으려면 github 릴리스 페이지에서 다운로드할 수 있습니다

https://github.com/micro/micro/releases

Test it

이제 마이크로가 설치되었으니 테스트해 보겠습니다.
micro web
Output

$ micro web2020-07-05 04:24:16  file=http/http.go:90 level=info service=web HTTP API Listening on [::]:80822020-07-05 04:24:16  file=v2@v2.9.1/service.go:200 level=info service=web Starting [service] go.micro.web2020-07-05 04:24:16  file=grpc/grpc.go:864 level=info service=web Server [grpc] Listening on [::]:264492020-07-05 04:24:16  file=grpc/grpc.go:697 level=info service=web Registry [mdns] Registering node: go.micro.web-b76a12a1-5226-429f-9633-ce304f179657

이제 localhost:8082를 방문하여 마이크로 웹페이지를 확인하세요.

Protoc 설치localhost:8082 就可以查看 micro 的 web 页面了。

安装 protoc

protoc 是 protobuf 的编译器,而 protobuf 是一种用来传输数据的格式,类似 json、xml 这些。
protoc 下载地址

https://github.com/protocolbuffers/protobuf/releases

下载好之后,bin 文件夹中有个 protoc 的可执行文件,把这个也添加到环境变量。(可以直接把它放到已经添加了环境变量的文件夹下就可以了,可以避免电脑里写满了各种环境变量,并且常用工具放到一个文件夹也方便管理)

推荐:《go语言

还有个 protoc-gen-go 也需要放进去,可以用下面的方式下载。

go get -u github.com/golang/protobuf/proto
go get -u github.com/golang/protobuf/protoc-gen-go

example

现在让我们写一个 demo 来练习一下。

一共有三个文件,server.goclient.gogreeter.proto

greeter.proto

syntax = "proto3";package protos;service Greeter {
    rpc Hello (Request) returns (Response){};}message Request {
    string name = 1;}message Response {
    string greeting = 2;}

server.go

package mainimport (
    "context"
    "fmt"
    "github.com/micro/go-micro/v2")type Greeter struct {}func (g *Greeter) Hello(context context.Context, req *Request, rsp *Response) error {
    rsp.Greeting = "Hello " + req.Name    return nil}func main() {
    service := micro.NewService(
        micro.Name("greeter"),
    )
    service.Init()

    err := RegisterGreeterHandler(service.Server(), new(Greeter))
    if err != nil {
        fmt.Println(err)
    }

    if err := service.Run(); err != nil {
        fmt.Println(err)
    }}

client.go

package mainimport (
    "context"
    "fmt"
    "github.com/micro/go-micro/v2")func main() {
    service := micro.NewService(micro.Name("greeter.client"))
    service.Init()

    greeter := NewGreeterService("greeter", service.Client())
    rsp, err := greeter.Hello(context.TODO(), &Request{Name: "Zaun pianist"})
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(rsp.Greeting)}

强烈建议使用 go mod 来管理依赖,项目更新速度很快,百度上的很多教程都不行了,安装过程各种错误

这是我的 mod 文件

module hello

go 1.14require (
    github.com/golang/protobuf v1.4.0
    github.com/micro/go-micro/v2 v2.9.1
    google.golang.org/protobuf v1.22.0)

注意,我的 greeter.proto 和 server.go、client.go 文件是放在同一个文件夹下面的

编译greeter.proto

protoc --micro_out=. --go_out=. greeter.proto

编译完成之后,会生成两个 go 源代码文件:

  • greeter.pb.go
  • greeter.pb.micro.go

运行

现在可以运行 server 了,这里因为 client 和 server 是放在同一个文件夹,也就是同一个包中,两个都有 main 函数,所以不能用 go run ./

protoc은 protobuf의 컴파일러이며 protobuf는 json, xml 등의 데이터를 전송하는 데 사용되는 형식입니다.

protoc 다운로드 주소

go run server.go greeter.pb.go greeter.pb.micro.go

다운로드 후 bin 폴더에 protoc 실행 파일이 있습니다. 이것을 환경 변수에 추가하세요. (환경 변수가 추가된 폴더에 직접 넣어도 됩니다. 이렇게 하면 컴퓨터가 다양한 환경 변수로 가득 차는 것을 피할 수 있고, 자주 사용하는 도구를 폴더에 넣어두는 것도 관리에 편리합니다.)

추천: "

go Language

protoc-gen-go도 꼭 넣어야 하는 부분이 있습니다. 다음과 같은 방법으로 다운로드 받으실 수 있습니다.

micro list services

example

이제 연습용 데모를 작성해 보겠습니다.

총 3개의 파일이 있습니다: server.go, client.go, greeter.proto

greeter.proto

micro web

🎜🎜server.go🎜
$ micro list services
go.micro.web
greeter
🎜🎜🎜client.go🎜
go run client.go greeter.pb.go greeter.pb.micro.go
🎜🎜 의존성을 관리하려면 go mod를 사용하는 것이 좋습니다. Baidu의 많은 튜토리얼이 더 이상 작동하지 않습니다. 설치 과정에서🎜🎜🎜이것은 내 모드 파일입니다🎜
{"id":"go.micro.client","code":408,"detail":"context deadline exceeded","status":"Request Timeout"}panic: runtime error: invalid memory address or nil pointer dereference[signal 0xc0000005 code=0x0 addr=0x28 pc=0xeef454]
🎜🎜내 Greeter.proto, server.go 및 client.go 파일이 같은 폴더에 있다는 점에 유의하세요🎜🎜🎜🎜🎜greeter.proto🎜
micro get service greeter
🎜After를 컴파일하세요 컴파일이 완료되면 Two go 소스 코드 파일이 생성됩니다: 🎜
  • greeter.pb.go
  • greeter.pb.micro.go
🎜🎜🎜Run🎜🎜이제 서버를 실행할 수 있습니다. 클라이언트와 서버가 동일한 폴더, 즉 동일한 패키지에 있기 때문에 둘 다 메인을 가지고 있습니다. 함수이므로 사용할 수 없습니다.go run ./, 다른 두 개가 추가되는 이유는 Go 언어 컴파일러의 요구 사항이며 컴파일에 필요한 파일을 지정해야 합니다. 🎜
$ micro get service greeter                                                                                    
service  greeter                                                                                               

version latest                                                                                                 

ID      Address Metadata                                                                                       
greeter-5d86321e-86f2-41a6-8230-f015466bf791    10.198.75.60:51395      broker=http,protocol=grpc,registry=mdns,server=grpc,transport=grpc                                                                                    

Endpoint: Greeter.Hello                                                                                        

Request: {                                                                                                     
        message_state MessageState {                                                                           
                no_unkeyed_literals NoUnkeyedLiterals                                                          
                do_not_compare DoNotCompare                                                                    
                do_not_copy DoNotCopy                                                                          
                message_info MessageInfo                                                                       
        }                                                                                                      
        int32 int32                                                                                            
        unknown_fields []uint8                                                                                 
        name string                                                                                            
}                                                                                                              Response: {                                                                                                    
        message_state MessageState {                                                                           
                no_unkeyed_literals NoUnkeyedLiterals                                                          
                do_not_compare DoNotCompare                                                                    
                do_not_copy DoNotCopy                                                                          
                message_info MessageInfo                                                                       
        }                                                                                                      
        int32 int32                                                                                            
        unknown_fields []uint8                                                                                 
        greeting string                                                                                        
}
🎜마이크로를 이용하면 현재 실행중인 마이크로서비스를 볼 수 있습니다🎜
go run server.go greeter.pb.go greeter.pb.micro.go --server_address=localhost:8888
🎜웹에서도 볼 수 있습니다🎜
$ go run client.go greeter.pb.go greeter.pb.micro.go
Hello Zaun pianist
🎜오류가 없다면 현재 서비스가 성공적으로 등록된 것을 확인할 수 있습니다. 🎜rrreee🎜🎜🎜Test🎜🎜이제 클라이언트를 실행하여 테스트할 수 있습니다🎜rrreee🎜테스트 중에 문제가 발생했습니다. 서비스를 등록했는데 클라이언트에서 호출하면 누락이 반환됩니다🎜rrreee🎜확인해 보세요. 서비스 정보🎜rrreeerrreee🎜 안에 있는 IP 주소를 주목하세요. 🎜10.198.xx🎜로 등록되어 있는데 왜 오류가 보고되나요? ? ? 🎜그러므로 서비스 등록시 IP 주소를 지정해주세요🎜rrreee🎜 이때 클라이언트와 통화하시면 잘못될 일이 없습니다. 🎜아아아아

위 내용은 Go-Micro 개발 환경을 설정하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제