micro web
micro 功能非常强大, 本文将详细阐述 micro web 命令行的功能
阅读本文前你可能需要进行如下知识储备
- golang 分布式微服务框架 go-micro 入门笔记 1: 搭建 go-micro 环境,
- golang 微服务框架 go-micro 入门笔记 2.1 micro 工具之 micro api
本文应用环境
名称 | 描述 |
---|---|
操作系统 | 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/
, 最后这个平台长这样
服务名称 | 说明 | 访问地址 |
---|---|---|
com.techidea8.web.www | A 公司的主域名 | http://www.xxx.com/www/ |
com.techidea8.srv.wxmp | A 公司的微信服务, 如签名、分享、菜单管理等 | http://www.xxx.com/wxmp/ |
com.techidea8.web.attach | A 公司的资源上传服务 | http://www.xxx.com/attach/ |
com.techidea8.web.pay | A 公司的支付服务 | http://www.xxx.com/pay/ |
com.techidea8.web.account | A 公司的用户中心 | http://www.xxx.com/account/ |
com.techidea8.web.article | A 公司的写作类平台 | http://www.xxx.com/article/ |
com.techidea8.web.demo1 | A 公司的 demo1 应用 | http://www.xxx.com/demo1/ |
com.techidea8.web.demox | A 公司的 demox 应用 | http://www.xxx.com/demox/ |
a 公司可以不断迭代业务, 这个平台具备良好的扩张性。
分布式任务分发平台
Openwrite 是一个面向技术人员的写作分发平台, 用户在该平台一次写作,可以分发到·csdn/oschina/jianshu/juejin·等各个渠道, 我们采用 micro web 开发如下微应用产品, 后续可以不断迭代开发新渠道服务com.techidea8.channel*
, 不会影响现有业务。
服务名称 | 说明 | 访问地址 |
---|---|---|
com.techidea8.web.www | 网站首页 | http://www.xxx.com/www/ |
com.techidea8.web.attach | 图片、资源等上传服务 | http://www.xxx.com/attach/ |
com.techidea8.web.account | 用户中心 | http://www.xxx.com/account/ |
com.techidea8.web.article | 文档中心 | http://www.xxx.com/article/ |
com.techidea8.web.channelcsdn | csdn 渠道应用 | http://www.xxx.com/channelcsdn/ |
com.techidea8.web.channeljuejin | 掘金渠道应用 | http://www.xxx.com/channeljue… |
实战 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
推荐阅读
扫微信二维码实现网站登陆提供体验地址和源代码
开源项目 golang go 语言后台管理框架 restgo-admin
支持手势触摸, 可左右滑动的日历插件
你必须知道的 18 个互联网业务模型