继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

winlion
关注TA
已关注
手记 14
粉丝 236
获赞 66

micro web

micro 功能非常强大,本文将详细阐述micro web 命令行的功能

阅读本文前你可能需要进行如下知识储备

本文应用环境

名称 描述
操作系统 win10
go version go version go1.12.7 windows/amd64
GOPATH E:\winlion\gopath
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/channeljuejin/

实战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

获得源代码并运行

下载解压后位置为%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
打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP