安装 go-micro V2 完整运行记录

  1. go环境同步一下,我在mac和ubuntu上安装的最开始使用的是go1.16,俩个系统安装都执行micro都不成功

panic: qtls.ConnectionState not compatible with tls.ConnectionState goroutine 1 [running]

记录大家估计都大同小异,后边自己在网上查了一下解决的办法因人而异,没有一个通用且行之有效的办法,如果debug过应该知道,发现 tls.ConnectionState 在是标准包 crypto/tls,也就是说,高版本的 Go 标准库的定义,和 github.com/marten-seemann/qtls 不兼容,除非公司业务必须使用这个版本,要不然请大家不要自己去给自己找事情,有个人挑战意愿的也可以试试,我这后边自己俩个系统都是用的是go1.14版本,依次执行下边的命名,有想试其他版本的也可以试试

下边正式开始:

macOS Monterey 12.2.1

ubuntu20.04

go get github.com/micro/micro/v2 // 这个会下载很多依赖,然后生成micro工具
复制代码
#这个安装输出的完整记录
go: downloading github.com/micro/micro/v2 v2.9.3
go: downloading github.com/micro/micro v1.18.0
go: github.com/micro/micro/v2 upgrade => v2.9.3
go: downloading github.com/micro/cli/v2 v2.1.2
go: downloading github.com/micro/go-micro/v2 v2.9.1
go: downloading golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2
go: downloading github.com/serenize/snaker v0.0.0-20171204205717-a683aaf2d516
go: downloading github.com/gorilla/mux v1.7.3
go: downloading google.golang.org/grpc v1.26.0
go: downloading github.com/golang/protobuf v1.4.2
go: downloading github.com/go-acme/lego/v3 v3.4.0
go: downloading github.com/lib/pq v1.3.0
go: downloading github.com/cpuguy83/go-md2man/v2 v2.0.0
go: downloading golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37
go: downloading github.com/google/uuid v1.1.1
go: downloading github.com/gobwas/ws v1.0.3
go: downloading github.com/pkg/errors v0.9.1
go: downloading github.com/patrickmn/go-cache v2.1.0+incompatible
go: downloading github.com/russross/blackfriday/v2 v2.0.1
go: downloading github.com/imdario/mergo v0.3.9
go: downloading github.com/go-git/go-git/v5 v5.1.0
go: downloading github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e
go: downloading github.com/gobwas/pool v0.2.0
go: downloading google.golang.org/protobuf v1.23.0
go: downloading github.com/evanphx/json-patch/v5 v5.0.0
go: downloading go.etcd.io/bbolt v1.3.4
go: downloading github.com/lucas-clemente/quic-go v0.14.1
go: downloading github.com/dustin/go-humanize v1.0.0
go: downloading github.com/bwmarrin/discordgo v0.20.2
go: downloading github.com/dgrijalva/jwt-go v3.2.0+incompatible
go: downloading github.com/miekg/dns v1.1.27
go: downloading github.com/gorilla/handlers v1.4.2
go: downloading github.com/shurcooL/sanitized_anchor_name v1.0.0
go: downloading github.com/cloudflare/cloudflare-go v0.10.9
go: downloading gopkg.in/telegram-bot-api.v4 v4.6.4
go: downloading github.com/ghodss/yaml v1.0.0
go: downloading github.com/hpcloud/tail v1.0.0
go: downloading github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee
go: downloading github.com/olekukonko/tablewriter v0.0.4
go: downloading github.com/coreos/etcd v3.3.18+incompatible
go: downloading google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1
go: downloading github.com/caddyserver/certmagic v0.10.6
go: downloading github.com/go-git/go-billy/v5 v5.0.0
go: downloading golang.org/x/sys v0.0.0-20200523222454-059865788121
go: downloading github.com/cheekybits/genny v1.0.0
go: downloading github.com/BurntSushi/toml v0.3.1
go: downloading github.com/mattn/go-runewidth v0.0.7
go: downloading github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca
go: downloading gopkg.in/yaml.v2 v2.2.4
go: downloading golang.org/x/time v0.0.0-20191024005414-555d28b269f0
go: downloading github.com/sergi/go-diff v1.1.0
go: downloading github.com/mitchellh/go-homedir v1.1.0
go: downloading github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99
go: downloading github.com/gogo/protobuf v1.2.1
go: downloading github.com/bitly/go-simplejson v0.5.0
go: downloading go.uber.org/zap v1.13.0
go: downloading github.com/emirpasic/gods v1.12.0
go: downloading github.com/klauspost/cpuid v1.2.3
go: downloading github.com/marten-seemann/qtls v0.4.1
go: downloading golang.org/x/text v0.3.2
go: downloading github.com/go-git/gcfg v1.5.0
go: downloading github.com/gorilla/websocket v1.4.1
go: downloading github.com/forestgiant/sliceutil v0.0.0-20160425183142-94783f95db6c
go: downloading github.com/fsnotify/fsnotify v1.4.7
go: downloading gopkg.in/warnings.v0 v0.1.2
go: downloading github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c
go: downloading gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7
go: downloading golang.org/x/tools v0.0.0-20191216173652-a0e659d51361
go: downloading github.com/marten-seemann/chacha20 v0.2.0
go: downloading github.com/cenkalti/backoff/v4 v4.0.0
go: downloading gopkg.in/fsnotify.v1 v1.4.7
go: downloading go.uber.org/multierr v1.3.0
go: downloading gopkg.in/square/go-jose.v2 v2.3.1
go: downloading github.com/hashicorp/hcl v1.0.0
go: downloading go.uber.org/atomic v1.5.0
go: downloading github.com/mitchellh/hashstructure v1.0.0
go: downloading github.com/nats-io/nats.go v1.9.2
go: downloading golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f
go: downloading go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee
go: downloading honnef.co/go/tools v0.0.1-2019.2.3
go: downloading github.com/nats-io/jwt v0.3.2
go: downloading github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f
go: downloading github.com/nats-io/nuid v1.0.1
go: downloading github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd
go: downloading github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f
go: downloading github.com/nats-io/nkeys v0.1.4
go: downloading github.com/nlopes/slack v0.6.1-0.20191106133607-d06c2a2b3249
go: downloading github.com/xanzy/ssh-agent v0.2.1
go: downloading github.com/technoweenie/multipartstreamer v1.0.1
复制代码
 $ micro --help  # 命令安装完在GOPATH/bin目录下,输出一下信息表示安装成功
NAME:
   micro - A microservice runtime

   Use `micro [command] --help` to see command specific help.

USAGE:
   micro [global options] command [command options] [arguments...]

VERSION:
   latest

COMMANDS:
   server      Run the micro server
   new         Create a service template
   env         Get/set micro cli environment
   login       Login using a token
   run         Run a service: micro run [source]
复制代码
# 首先进入到项目目录,这里我以我自己的go项目目录为例
cd xxx

# 调用micro生成代码,这里不详细讲解micro的使用,大家下来仔细研究一下,先使用一下
# 默认情况下Micro生成的代码会放到GOPATH/src中,通过配置--gopath=false可以选择在当前目录下
micro new --gopath=false hello
复制代码
// 这是输出的完整记录,后面还跟着详细的使用说明
Creating service go.micro.service.hello in hello

.
├── main.go
├── generate.go
├── plugin.go
├── handler
│   └── hello.go
├── subscriber
│   └── hello.go
├── proto
│   └── hello
│       └── hello.proto
├── Dockerfile
├── Makefile
├── README.md
├── .gitignore
└── go.mod


download protoc zip packages (protoc-$VERSION-$PLATFORM.zip) and install:

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

// 前面的跳过,看下面的,要求我们安装一些东西,别犹豫,安装就好,后面就知道是干什么的了
download protobuf for micro:

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

compile the proto file hello.proto:

cd hello
make proto
复制代码

生成下面的工具:

micro protoc-gen-go protoc-gen-micro

我们还需要一个proto文件的解析工具:protobuf,可以直接去github或者codeChina下载二进制版,也可以自己编译生成protoc,我自己在codeChina上下载的zip版,解压后放到GOPATH/bin ,很明显刚才的输出是给我们生成了一个名叫hello的项目,我们cd hello,然后执行

make proto // 这个执行后法相一个错误,不要慌,输出很明显的提示了我们俩个选项:在.proto文件中添加go_packege选项,或者命令行参数中指定M这个参数,那我们去修改.proto文件,看看proto文件的格式和语法,

protoc --proto_path=. --micro_out=Mproto/imports/api.proto=github.com/micro/go-micro/v2/api/proto:. --go_out=Mproto/imports/api.proto=github.com/micro/go-micro/v2/api/proto:. proto/hello/hello.proto
protoc-gen-go: unable to determine Go import path for "proto/hello/hello.proto"

Please specify either:
	• a "go_package" option in the .proto source file, or
	• a "M" argument on the command line.

See https://developers.google.com/protocol-buffers/docs/reference/go-generated#package for more information.

--go_out: protoc-gen-go: Plugin failed with status code 1.
make: *** [proto] Error 1

复制代码

image.png 因为我们在项目中,所以只需要指定到项目下文件的包路径:路径使用proto/hello,现在添加完保存好,使用protoc --proto_path=. --micro_out=. --go_out=. proto/hello/hello.proto 注意,其中的--go_out--micro_out参数指定了生成文件的输出路径,应与上一步我们修改的go_package保持一致,

// proto 语法和编译下来可以熟悉一下,现在我们执行下面的命令看看,
protoc --proto_path=. --micro_out=. --go_out=. proto/hello/hello.proto
//对比之前的文件是不是在proto/hello的文件下多生成了俩个go文件,是的这就是使用proto文件的好处,可以生成c++、java、python等相关的文件
.
├── Dockerfile
├── Makefile
├── README.md
├── generate.go
├── go.mod
├── handler
│   └── hello.go
├── main.go
├── plugin.go
├── proto
│   └── hello
│       ├── hello.pb.go
│       ├── hello.pb.micro.go
│       └── hello.proto
└── subscriber
    └── hello.go

复制代码

下面我们把服务试着先跑起来:

扫描二维码关注公众号,回复: 13687774 查看本文章
go mod tidy
// 再次的输出一波
go: finding module for package github.com/micro/go-micro/v2/logger
go: finding module for package github.com/micro/go-micro/v2/api
go: finding module for package google.golang.org/protobuf/runtime/protoimpl
go: finding module for package google.golang.org/protobuf/reflect/protoreflect
go: finding module for package github.com/micro/go-micro/v2
go: finding module for package github.com/micro/go-micro/v2/server
go: finding module for package github.com/golang/protobuf/proto
go: finding module for package github.com/micro/go-micro/v2/client
go: downloading github.com/micro/go-micro v1.18.0
go: found github.com/micro/go-micro/v2 in github.com/micro/go-micro/v2 v2.9.1
go: found github.com/golang/protobuf/proto in github.com/golang/protobuf v1.5.2
go: found google.golang.org/protobuf/reflect/protoreflect in google.golang.org/protobuf v1.27.1
go: downloading github.com/google/go-cmp v0.5.5
go: downloading gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f
go: downloading github.com/stretchr/testify v1.4.0
go: downloading github.com/go-git/go-git-fixtures/v4 v4.0.1
go: downloading github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869
go: downloading github.com/kr/pretty v0.1.0
go: downloading golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e
go: downloading github.com/nats-io/nats-server/v2 v2.1.6
go: downloading golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543
go: downloading github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b
go: downloading github.com/pmezard/go-difflib v1.0.0
go: downloading github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5
go: downloading github.com/kr/text v0.2.0
go: downloading github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e
go: downloading github.com/davecgh/go-spew v1.1.1
go: downloading github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0
go: downloading github.com/soheilhy/cmux v0.1.4
go: downloading github.com/prometheus/client_golang v1.1.0
go: downloading github.com/gliderlabs/ssh v0.2.2
go: downloading github.com/coreos/go-semver v0.3.0
go: downloading github.com/grpc-ecosystem/go-grpc-middleware v1.1.0
go: downloading github.com/jonboulle/clockwork v0.1.0
go: downloading github.com/google/btree v1.0.0
go: downloading github.com/modern-go/reflect2 v1.0.1
go: downloading github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e
go: downloading github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2
go: downloading github.com/prometheus/procfs v0.0.5
go: downloading github.com/beorn7/perks v1.0.1
go: downloading github.com/prometheus/common v0.6.0
go: downloading github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
go: downloading github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4
go: downloading github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239
go: downloading github.com/coreos/bbolt v1.3.3
go: downloading github.com/json-iterator/go v1.1.9
go: downloading sigs.k8s.io/yaml v1.1.0
go: downloading github.com/grpc-ecosystem/grpc-gateway v1.9.5
go: downloading github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568
go: downloading github.com/tmc/grpc-websocket-proxy v0.0.0-20200122045848-3419fae592fc
go: downloading github.com/matttproud/golang_protobuf_extensions v1.0.1
go: downloading github.com/sirupsen/logrus v1.4.2
go: downloading github.com/konsorten/go-windows-terminal-sequences v1.0.2
go: downloading github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7

复制代码
// 运行服务
go run main.go
// 看到下面的输出是不是舒了一口气
2022-02-23 18:45:36  [email protected]/service.go:200 level=info Starting [service] go.micro.service.hello
2022-02-23 18:45:36  file=grpc/grpc.go:864 level=info Server [grpc] Listening on [::]:53200
2022-02-23 18:45:36  file=grpc/grpc.go:881 level=info Broker [http] Connected to 127.0.0.1:53201
2022-02-23 18:45:36  file=grpc/grpc.go:697 level=info Registry [mdns] Registering node: go.micro.service.hello-cda378e8-1494-4e71-8acd-ce2d37a8d23e
2022-02-23 18:45:36  file=grpc/grpc.go:730 level=info Subscribing to topic: go.micro.service.hello

复制代码

go.micro.service.hello-cda378e8-1494-4e71-8acd-ce2d37a8d23e - 服务发现:mdns - 基于grpc的Server服务:53200 - 基于http的Broker服务:53201 - 订阅消息服务,主题:go.micro.service.hello

你可以在另一个命令行窗口执行micro list services命令,可以看到我们的服务go.micro.service.hello已经被注册:

> micro list services
go.micro.service.hello
micro.http.broker
复制代码

完结:micro安装的时候看版本匹配了后面的比较简单,不过需要熟悉的东西比较多:grpc、makefile、proto、protoc,下篇会写一个通信的client

猜你喜欢

转载自juejin.im/post/7067857442339553293
今日推荐