golang微服务框架go-micro 入门笔记2.2 micro工具之令人激动的micro web

winlion · · 1850 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

# micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 ## 阅读本文前你可能需要进行如下知识储备 + [golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境,](https://www.techidea8.com/archives/49) + [golang微服务框架go-micro 入门笔记2.1 micro工具之micro api](https://www.techidea8.com/archives/53) ## 本文应用环境 |名称|描述| |--|--| |操作系统|win10| |go version|go version go1.12.7 windows/amd64| |GOPATH|E:\winlion\gopath| |GOPROXY|https://goproxy.io| |G111MODULE|on| |命令行工具|cmder工具,可自行百度安装| ## 命令行说明 micro web指令全部参数如下 ```bash 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| ### 获得源代码并运行 重要的事情说3次 + [micro web 源代码https://idea.techidea8.com/open/idea.shtml?id=7](https://idea.techidea8.com/open/idea.shtml?id=7) + [micro web 源代码https://idea.techidea8.com/open/idea.shtml?id=7](https://idea.techidea8.com/open/idea.shtml?id=7) + [micro web 源代码 https://idea.techidea8.com/open/idea.shtml?id=7](https://idea.techidea8.com/open/idea.shtml?id=7) 下载解压后位置为`%GOPATH%\src\techidea8.com\microapp\doc\web` ```bash $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 ``` 界面如下 ![服务运营效果](https://www.techidea8.com/wp-content/uploads/2019/08/2019082508274128.png) ### 关于www应用细节 + 创建应用框架 ```bash >micro new --type=web techidea8.com/microapp/doc/web/www ``` + 设计proto文件,这里需要请求一个Guess接口 ```bash #E:\winlion\gopath\src\techidea8.com\microapp\doc\web\www\proto\recommend\recommend.proto service Recommend{ rpc Guess(Request)returns(Response){}; } ``` + 通过proto生成go文件 ```bash #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 # ``` + 调用猜你喜欢服务,核心代码如下 ```golang //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 ```golang //默认需要加上服务名前奏 // register html handler service.Handle("/", http.FileServer(http.Dir("html"))) // register call handler/www/guess service.HandleFunc("/guess", handler.Guess) ``` + 启动web服务 ```bash $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细节 + 创建应用框架 ```bash >micro new --type=srv techidea8.com/microapp/doc/web/recommend ``` + 设计proto文件,这里需要请求一个Guess接口 ```bash #E:\winlion\gopath\src\techidea8.com\microapp\doc\web\recommend\proto\recommend\recommend.proto service Recommend{ rpc Guess(Request)returns(Response){}; } ``` + 通过proto生成go文件 ```bash #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 # ``` + 实现推荐服务,核心代码如下 ```golang //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 ```golang main.go // 取消事件订阅支持 //micro.RegisterSubscriber("go.micro.srv.recommend", service.Server(), new(subscriber.Hello)) //取消事件发布支持 //micro.RegisterSubscriber("go.micro.srv.recommend", service.Server(), subscriber.Handler) ``` + 启动推荐服务 ```bash $go run main.go ``` ### 推荐阅读 + [扫微信二维码实现网站登陆提供体验地址和源代码](https://www.techidea8.com/archives/46) + [开源项目golang go语言后台管理框架restgo-admin](https://www.techidea8.com/archives/34) + [支持手势触摸,可左右滑动的日历插件](https://www.techidea8.com/archives/22) + [你必须知道的18个互联网业务模型](https://www.techidea8.com/archives/31)

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1850 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传