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

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

获得源代码并运行

重要的事情说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个互联网业务模型

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容