>文章来自于:https://reading.developerlearning.cn/reading/72-2019-12-19-go-micro-2/
分享者:舒先
## 观看视频
https://youtu.be/7lvZhhgUB7o
## 【Go 夜读】#72 Go-Micro 编写微服务实战
往期:[第一期](https://github.com/developer-learning/night-reading-go/issues/457)
基于Go-Micro开发、实现如下服务架构:
![image](https://user-images.githubusercontent.com/20906540/70113465-3cd84a00-1694-11ea-836d-37ac0b84cbc5.png)
包含Go-Micro核心功能
## 大纲
设计中,大致如下:
1. 使用Go-Micro编写微服务
2. 示例架构,使用微服务进行两个数学计算并返回结果
3. Go-Micro中的服务类型:Srv、Web、API
4. Broker与异步消息
5. Wrapper与日志、限流
6. 如何使用插件:示例使用RabbitMQ插件
7. Micro API网关浅讲
## 分享者自我介绍
Micro 中国团队
[陈洪波](https://github.com/hb-chen):本期资料提供与审核,10年,成都云创新技术经理,Gopher、Phper,全栈码农,专注于微服务架构&服务网格技术的应用。
[Edward Chen](https://github.com/crazybber):本期资料提供与审核,10年+,Honeywell HBT 研发技术专家,擅长Racher/K8S/Go/C#/C++/C/Typescript,专注于大规模IOT容器化微服务架构,一线开发。
[舒先](https://github.com/printfcoder):本期资料提供与主讲,7年+金融级微服务开发经验,OPPO,Micro维护者团队成员,负责中国生态。
[徐旭](https://github.com/Allenxuxu):本期资料提供与审核,应届,趣头条工程师,喜欢开源,Gev作者,擅长网络编程与表情包。
## 分享时间
2019-12-19 21:00:00 UTC+8
## 分享地址
https://zoom.us/j/6923842137
## Slides
[GoogleDoc](https://docs.google.com/presentation/d/1xtZ9b2yx0kt1QWXh-mdDc3VpmlOXywFKPPLr4g8PUqg/edit?usp=sharing)
## 参考资料
[Micro中文资源](https://github.com/micro-in-cn/tutorials)
### 分享中提到的资料
[如何使用Wrapper](https://github.com/micro-in-cn/tutorials/tree/master/examples/middle-practices/micro-wrapper)
[示例代码与PPT](https://github.com/micro-in-cn/tutorials/tree/master/others/share/learning-go)
### 问题
1. 什么是 Function,其场景是什么?
答:Function 是 FaaS 服务中的一种服务类型,旨在提供只响应一次的服务,响应后该服务便不会再生存,会被卸载掉。场景比较我们有时接口是用来初始化数据的,那就可以用 Function,借用容器管理,可以重复发布 Function 类的服务,让其在有限的范围内提供服务。[参考](https://micro.mu/blog/cn/2019/11/19/functions.html),[代码示例](https://github.com/micro-in-cn/tutorials/tree/master/examples/basic-practices/micro-service/function)
2. 服务聚合的场景是什么?
答:这个是业务架构的设定,当我们把服务拆分成微服务时,各服务之间处理的能力基本是独立不耦合的,那我们要把它们结合起来提供能力对外服务,就需要服务聚合。比如常见的订单查询,通常会有查询用户订单与商品详情的需要,而用户服务与商品服务又是各自独立,这便是聚合服务存在的价值。它的本质是把服务能力按业务需要整合。
3. 多个 Server 分仓库,proto 文件如何存放?
答:proto 文件本质是接口描述文件,推荐放在公共目录或公共仓库,定义后,转成不同语言的接口包,也存放在公共仓库,这样任何服务想用就去找就行了。
4. http可以替换成其它框架吗?
答:可以,go-micro 的 web 包只是为大家包装了注册到 go-micro 生态的能力,其它使用的基本是 go 原生的 http 能力。如果想使用其它框架,自行定义 go-micro 的 client(client.NewClient(opts...))来请求其它 go-micro srv 服务即可。
5. HttpTransport 为什么要改成 gRPC 的?
答:这个 Http 始终只适合放在C端的客户端,在RPC框架中使用,基于gRPC更好,总得来说,gRPC 是基于 2.0 的 HTTP 构建通信模式,它是专业的面向后台应用的通信协议。gRPC 优化了很多部分,比如一般我们用HTTP传送数据时,都是可读的 JSON 结构,而 gRPC 使用了效率更高的 protobuf 格式,HTTP 当然也可以使用 protobuf 的 Payload,但是 gRPC 已经做了,为什么我们要再重新做呢?gRPC 的缺点就是通信两端都要支持,否则没用,HTTP 则没有这个顾虑。go-micro 在这方面都是可插拔的,大家想用哪个 Transport,在命令行或 API 参数中使用即可。
---
有疑问加站长微信联系(非本文作者)