GO 微服务GO-Micro(11)-纯个人学习笔记记录:使用Micro Api 网关暴露我们的srv服务(命名空间的重要性)

微服务架构

在微服务的架构,我们知道API网关这个东西是必不可少的一部分。那什么是API网关呐?
图示来源:https://github.com/stack-labs/learning-videos/tree/master/docs/micro-api

image.png

图示来源:https://github.com/stack-labs/learning-videos/tree/master/docs/micro-api

image.png

简单来说API网关就是:统一的一个入口地址,也类似LB,把我们的所以请求统一指向网关,然后由网关统一根据路由进行相关协议转换分发到后端服务上。作为一个网关,我们还可以同时再我们的API网关地方集成我们的相关的鉴权,限流,熔断,降级等服务。

如官网提供的示例图:


image.png

通过API网关访问我们的服务

之前我们的也有介绍过关于API网关,https://www.jianshu.com/p/47ab24998f33
之前启动我们的网关的时候使用的形式是:

D:\code\go\Mi_Onse> micro api --namespace=go.micro --type=service

现在我们重新再认识一下这个,查看我们的micro api --help 相关的命令:

D:\code\go\Mi_Onse>micro api -h
NAME:
   micro api - Run the api gateway

USAGE:
   micro api [command options] [arguments...]

OPTIONS:
   --address value    Set the api address e.g 0.0.0.0:8080 [%MICRO_API_ADDRESS%]
   --handler value    Specify the request handler to be used for mapping HTTP requests to services; {api, event, http, rpc} [%MICRO_API_HANDLER%]
   --namespace value  Set the namespace used by the API e.g. com.example [%MICRO_API_NAMESPACE%]
   --type value       Set the service type used by the API e.g. api [%MICRO_API_TYPE%]
   --resolver value   Set the hostname resolver used by the API {host, path, grpc} [%MICRO_API_RESOLVER%]
   --enable_rpc       Enable call the backend directly via /rpc (default: false) [%MICRO_API_ENABLE_RPC%]
   --enable_cors      Enable CORS, allowing the API to be called by frontend applications (default: true) [%MICRO_API_ENABLE_CORS%]
   --help, -h         show help (default: false)

对于上述的列举的命令:

以下参考来源为:https://blog.csdn.net/ztemt_sw2/article/details/106208946

   --address value :指定我们的网关地址,默认端口号码是8080

  --namespace:设置API使用的名称空间,意思就是可以通过namespace将服务归类,例如对外的公共服务和内部服务,注意这里的域名要跟代码对应起来,比如域名为com.test.api,那么代码中的服务名就要以com.test.api开头。

  --handler:网关用到的http handler,不同的handler处理不同的请求,对请求的处理方式也有所不同。

micro支持的handler类型以下几种:

api handler:可以处理任意http请求,并以RPC的方式将请求转发给后端服务,url path为/service/method,例如http://localhost:8080/greeter/hello,则网关会在注册中心中寻找endpoints为Greeter.Hello的服务并转发;

rpc handler:处理http post请求,http body为json或者protobuf格式(Content-Type为application/json或者application/protobuf),url path的要求同api handler;

event handler:将请求做为消息发送到消息中间件上;

proxy handler:用于http反向代理;

启动micro api

启动命令:
D:\code\go\Mi_Onse>micro api
2021-01-26 16:43:39  file=api/api.go:285 level=info service=api Registering API Default Handler at /
2021-01-26 16:43:39  file=http/http.go:90 level=info service=api HTTP API Listening on [::]:8080
2021-01-26 16:43:39  file=v2@v2.9.1/service.go:200 level=info service=api Starting [service] go.micro.api
2021-01-26 16:43:39  file=grpc/grpc.go:864 level=info service=api Server [grpc] Listening on [::]:53083
2021-01-26 16:43:39  file=grpc/grpc.go:697 level=info service=api Registry [mdns] Registering node: go.micro.api-cf515fc3-d7fa-460f-b434-7328596c42ca

上述看到我们的 API也是一个服务,它启动的时候,默认注册到了MDNS中,此时我们的通过ectd是找不到我们的服务列表。

D:\code\go\Mi_Onse>micro --registry etcd --registry_address 192.168.219.130:2379 list services
go.micro.service.greeter
micro.http.broker

D:\code\go\Mi_Onse>

使用默认查询 MDNS则可以找得到我们的服务列表:

D:\code\go\Mi_Onse>micro list services
go.micro.api

D:\code\go\Mi_Onse>
启动命令把API也注册到我们的ECTD中心上:

命令方式注册:

D:\code\go\Mi_Onse>micro --registry=etcd --registry_address=192.168.219.130:2379  api

结果:

D:\code\go\Mi_Onse>micro --registry=etcd --registry_address=192.168.219.130:2379  api
2021-01-26 16:53:36  file=api/api.go:285 level=info service=api Registering API Default Handler at /
2021-01-26 16:53:36  file=http/http.go:90 level=info service=api HTTP API Listening on [::]:8080
2021-01-26 16:53:36  file=v2@v2.9.1/service.go:200 level=info service=api Starting [service] go.micro.api
2021-01-26 16:53:36  file=grpc/grpc.go:864 level=info service=api Server [grpc] Listening on [::]:53798
2021-01-26 16:53:36  file=grpc/grpc.go:697 level=info service=api Registry [etcd] Registering node: go.micro.api-c7781046-a08f-4678-8606-6fdc3c898845

此时查看我们的服务列表,已经有有API网关服务存在:

D:\code\go\Mi_Onse>micro --registry etcd --registry_address 192.168.219.130:2379 list services
go.micro.api
go.micro.service.greeter
micro.http.broker

尝试通过我们的网关访问我们的内部的服务:

image.png

尴尬了吧!找不到服务!!!好像是我启动的时候没设置具体命名空间!!

修改我们的启动的命令:

命令:

D:\code\go\Mi_Onse>micro --registry=etcd --registry_address=192.168.219.130:2379  api  --namespace=go.micro --type=service

结果:

D:\code\go\Mi_Onse>micro --registry=etcd --registry_address=192.168.219.130:2379  api  --namespace=go.micro --type=service
2021-01-26 17:00:05  file=api/api.go:285 level=info service=api Registering API Default Handler at /
2021-01-26 17:00:05  file=http/http.go:90 level=info service=api HTTP API Listening on [::]:8080
2021-01-26 17:00:05  file=v2@v2.9.1/service.go:200 level=info service=api Starting [service] go.micro.api
2021-01-26 17:00:05  file=grpc/grpc.go:864 level=info service=api Server [grpc] Listening on [::]:54307
2021-01-26 17:00:05  file=grpc/grpc.go:697 level=info service=api Registry [etcd] Registering node: go.micro.api-4b8268f7-1209-4308-ada6-3d70021977c9
::1 - - [26/Jan/2021:17:00:09 +0800] "GET /greeter/greeter/call HTTP/1.1" 200 16 "" "PostmanRuntime/7.26.8"

再次访问我们的地址:http://localhost:8080/greeter/greeter/call

image.png

错误的类型设置:

D:\code\go\Mi_Onse>micro --registry=etcd --registry_address=192.168.219.130:2379  api  --namespace=go.micro --type=api

结果:

D:\code\go\Mi_Onse>micro --registry=etcd --registry_address=192.168.219.130:2379  api  --namespace=go.micro --type=api
2021-01-26 17:09:57  file=api/api.go:285 level=info service=api Registering API Default Handler at /
2021-01-26 17:09:57  file=http/http.go:90 level=info service=api HTTP API Listening on [::]:8080
2021-01-26 17:09:57  file=v2@v2.9.1/service.go:200 level=info service=api Starting [service] go.micro.api
2021-01-26 17:09:57  file=grpc/grpc.go:864 level=info service=api Server [grpc] Listening on [::]:55158
2021-01-26 17:09:57  file=grpc/grpc.go:697 level=info service=api Registry [etcd] Registering node: go.micro.api-e0f4f67c-7d92-4c32-822b-19a0f06f9836
::1 - - [26/Jan/2021:17:10:01 +0800] "GET /greeter/greeter/call HTTP/1.1" 500 94 "" "PostmanRuntime/7.26.8"
::1 - - [26/Jan/2021:17:10:01 +0800] "GET /greeter/greeter/call HTTP/1.1" 500 94 "" "PostmanRuntime/7.26.8"
::1 - - [26/Jan/2021:17:10:02 +0800] "GET /greeter/greeter/call HTTP/1.1" 500 94 "" "PostmanRuntime/7.26.8"
::1 - - [26/Jan/2021:17:10:03 +0800] "GET /greeter/greeter/call HTTP/1.1" 500 94 "" "PostmanRuntime/7.26.8"
::1 - - [26/Jan/2021:17:10:03 +0800] "GET /greeter/greeter/call HTTP/1.1" 500 94 "" "PostmanRuntime/7.26.8"

设置命名空间的方式:

## Set Namespace

Run the micro API with custom namespace

```
micro api --handler=api --namespace=com.foobar.api
```

or
```
MICRO_API_NAMESPACE=com.foobar.api micro api --handler=api
```

Set service name with the namespace

```
service := micro.NewService(
        micro.Name("com.foobar.api.example"),
)
```   

注意事项点就是我们的启动的API网关的时候,需要记得设置它的明明空间,不然我们的访问是找不到服务的!!!

网关命名空间测试和猜想:
image.png

image.png

试一试,修改我们命名空间看看:

image.png

此时访问我们的接口,能正常的访问:http://localhost:8080/greeter/greeter/call

image.png

更换一个类型:


image.png

则这个时候是找不到服务滴:

image.png

启动多个API网关:

D:\code\go\Mi_Onse>micro --registry etcd --registry_address 192.168.219.130:2379 list services
go.micro.api
go.micro.service.greeter
go.micro.service22.greeter
micro.http.broker

D:\code\go\Mi_Onse>

启动网关 使用另一个端口启动:

micro --registry=etcd --registry_address=192.168.219.130:2379  api  --namespace=go.micro --type=service --address 0.0.0.0:8080

操作:

D:\code\go\Mi_Onse>micro --registry=etcd --registry_address=192.168.219.130:2379  api  --namespace=go.micro --type=service22 --address 0.0.0.0:8082
2021-01-26 17:56:03  file=api/api.go:285 level=info service=api Registering API Default Handler at /
2021-01-26 17:56:03  file=http/http.go:90 level=info service=api HTTP API Listening on [::]:8082
2021-01-26 17:56:03  file=v2@v2.9.1/service.go:200 level=info service=api Starting [service] go.micro.api
2021-01-26 17:56:03  file=grpc/grpc.go:864 level=info service=api Server [grpc] Listening on [::]:58991
2021-01-26 17:56:04  file=grpc/grpc.go:697 level=info service=api Registry [etcd] Registering node: go.micro.api-e2a61d48-41e0-4ac8-a49c-466f0081f09f
::1 - - [26/Jan/2021:17:56:10 +0800] "GET /greeter/greeter/call HTTP/1.1" 200 16 "" "PostmanRuntime/7.26.8"
::1 - - [26/Jan/2021:17:56:11 +0800] "GET /greeter/greeter/call HTTP/1.1" 200 16 "" "PostmanRuntime/7.26.8"

请求服务,此时都兼容,访问的是
http://localhost:8082/greeter/greeter/call 访问服务service22
http://localhost:8080/greeter/greeter/call 访问服务service

image.png

image.png

另一种测试1:


image.png

image.png

另一种测试2:

image.png

image.png

另一种测试3:


image.png

image.png

另一种测试4(OK):

image.png

image.png

》PS: 请求的地址也可以改为:http://localhost:8080/greeter/callhttp://localhost:8080/greeter/greeter/cal

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

推荐阅读更多精彩内容