golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web
source link: https://www.tuicool.com/articles/7RVFF32
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
micro web
micro 功能非常强大,本文将详细阐述micro web 命令行的功能
阅读本文前你可能需要进行如下知识储备
本文应用环境
名称 描述 操作系统 win10 go version go version go1.12.7 windows/amd64 GOPATH E:winliongopath GOPROXY https://goproxy.io G111MODULE on 命令行工具 cmder工具,可自行百度安装命令行说明
micro web指令全部参数如下
NAME: micro web - Run the web dashboard USAGE: micro web [command options] [arguments...] OPTIONS: --address value Set the web UI address e.g 0.0.0.0:8082 [%MICRO_WEB_ADDRESS%] --namespace value Set the namespace used by the Web proxy e.g. com.example.web [%MICRO_WEB_NAMESPACE%]
- address 用来指定web访问地址,默认是8082端口,
- namespace 用来指定开启web支持的服务空间,com.axample.web表示所有满足com.axample.web.*的应用都支持
典型应用场景
微信应用开发平台
A公司是一家小创业公司,a公司的主要业务是做微信小应用,目前他们公司只有一个域名 www.xxx.com
,A公司采用micro web 工具,可以不断迭代新应用到 www.xxx.com
域名下,比如昨天他们开发了一个应用demo1,外网用户访问地址 https://www.xxx.com/demo1/
,明天天他们开发了一个应用demo2,外网用户访问地址 https://www.xxx.com/demo2/
,最后这个平台长这样
a公司可以不断迭代业务,这个平台具备良好的扩张性。
分布式任务分发平台
Openwrite是一个面向技术人员的写作分发平台,用户在该平台一次写作,可以分发到·csdn/oschina/jianshu/juejin·等各个渠道,我们采用micro web开发如下微应用产品,后续可以不断迭代开发新渠道服务 com.techidea8.channel*
,不会影响现有业务。
实战hello,world!
业务梳理
假设我们需要实现类似于如下千人千面功能,具体应用场景如下
- 首页应用www,展示常用基本信息
- 推荐支持,不同的用户(uuid标识),显示不同的内容
服务设计如下
服务名称 说明 访问地址 go.micro.web.www 系统首页 http://127.0.0.1 :8082/www/ go.micro.srv.recommend 推荐服务 http://127.0.0.1 :8082/www/guess获得源代码并运行
重要的事情说3次
micro web 源代码https://idea.techidea8.com/open/idea.shtml?id=7 micro web 源代码https://idea.techidea8.com/open/idea.shtml?id=7 micro web 源代码 https://idea.techidea8.com/open/idea.shtml?id=7 下载解压后位置为 %GOPATH%\src\techidea8.com\microapp\doc\web
$pwd E:\winlion\gopath\src\techidea8.com\microapp\doc\web $ls recommend/ www/
依次执行如下指令即可
#切换到wwww目录下 src\techidea8.com\microapp\doc\web\www>go run main.go #切换到recommend服务目录下 src\techidea8.com\microapp\doc\web\recommend>go run main.go #启动web支持 src\techidea8.com\microapp\doc\web\recommend>micro web --namespace=go.micro.web
界面如下
关于www应用细节
- 创建应用框架
>micro new --type=web techidea8.com/microapp/doc/web/www
- 设计proto文件,这里需要请求一个Guess接口
#E:\winlion\gopath\src\techidea8.com\microapp\doc\web\www\proto\recommend\recommend.proto service Recommend{ rpc Guess(Request)returns(Response){}; }
- 通过proto生成go文件
#E:\winlion\gopath\src\techidea8.com\microapp\doc\web\www\ 目录下 >protoc --proto_path=. --proto_path=E:/winlion/gopath/src --go_out=. --micro_out=. proto/recommend/recommend.proto #
- 调用猜你喜欢服务,核心代码如下
//handler/handler.go //go.micro.srv.recommend 是后端猜你喜欢服务名称 guessClient := recommend.NewRecommendService("go.micro.srv.recommend", client.DefaultClient) rsp, err := guessClient.Guess(context.TODO(), &recommend.Request{ Uuid: request["uuid"].(string),//uuid是前端用户ID })
- 猜你喜欢restful接口支持/www/guess
//默认需要加上服务名前奏 // register html handler service.Handle("/", http.FileServer(http.Dir("html"))) // register call handler/www/guess service.HandleFunc("/guess", handler.Guess)
- 启动web服务
$micro web --namespace=go.micro.web #结果如下 2019/08/25 15:32:08 HTTP API Listening on [::]:8082 2019/08/25 15:32:08 Transport [http] Listening on [::]:57563 2019/08/25 15:32:08 Broker [http] Connected to [::]:57564 2019/08/25 15:32:08 Registry [mdns] Registering node: go.micro.web-32fafadb-a795-46bc-b4d8-ad9a30607a7e
关于推荐服务recommend细节
- 创建应用框架
>micro new --type=srv techidea8.com/microapp/doc/web/recommend
- 设计proto文件,这里需要请求一个Guess接口
#E:\winlion\gopath\src\techidea8.com\microapp\doc\web\recommend\proto\recommend\recommend.proto service Recommend{ rpc Guess(Request)returns(Response){}; }
- 通过proto生成go文件
#E:\winlion\gopath\src\techidea8.com\microapp\doc\web\recommend\ 目录下 >protoc --proto_path=. --proto_path=E:/winlion/gopath/src --go_out=. --micro_out=. proto/recommend/recommend.proto #
- 实现推荐服务,核心代码如下
//handler\recommend.go //go.micro.srv.recommend 是后端猜你喜欢服务名称 func (e *Recommend) Guess(ctx context.Context, req *recommend.Request, rsp *recommend.Response) error { log.Log("Received Recommend.Call request") //具体推荐算法实在这里实现的, //推荐算法得到结果后赋值给resp.Results rsp.Results = "这是用户[" + req.Uuid + "]的推荐内容" return nil }
- 取消事件相关特性
我们这里不考虑事件,所以将事件相关特性取消,先一出subscriber目录,然后修改main.go
main.go // 取消事件订阅支持 //micro.RegisterSubscriber("go.micro.srv.recommend", service.Server(), new(subscriber.Hello)) //取消事件发布支持 //micro.RegisterSubscriber("go.micro.srv.recommend", service.Server(), subscriber.Handler)
- 启动推荐服务
$go run main.go
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK