微服务实战Go Micro v3 系列(三)-启动HTTP服务

celverbamboo · · 1392 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

这篇就是使用 go-micro 的 http 创建一个可以调用接口的微服务HTTP <!--more--> ## 源码地址 * [源码地址](https://github.com/CleverBamboo/go-micro-examples) * [爱租房](https://github.com/CleverBamboo/renting) ## 系列文章 * [微服务实战Go Micro v3 系列(一)- 基础篇](https://cleverbamboo.github.io/2021/04/27/GO/微服务实战Go-Micro-v3-系列(一)-基础篇/#more) * [微服务实战Go Micro v3 系列(二)- HelloWorld](https://cleverbamboo.github.io/2021/04/27/GO/微服务实战Go-Micro-v3-系列(二)-HelloWorld/#more) * [微服务实战Go-Micro v3 系列(三)- 启动HTTP服务](https://cleverbamboo.github.io/2021/04/28/GO/微服务实战Go-Micro-v3-系列(三)-启动HTTP服务/#more) * [微服务实战Go Micro v3 系列(四)- 事件驱动(Pub/Sub)](https://cleverbamboo.github.io/2021/05/12/GO/微服务实战Go-Micro-v3-系列(四)-事件驱动-Pub-Sub/#more) * [微服务实战Go Micro v3 系列(五)- 注册和配置中心](https://cleverbamboo.github.io/2021/06/02/GO/%E5%BE%AE%E6%9C%8D%E5%8A%A1%E5%AE%9E%E6%88%98Go-Micro-v3-%E7%B3%BB%E5%88%97%EF%BC%88%E4%BA%94%EF%BC%89-%E6%B3%A8%E5%86%8C%E5%92%8C%E9%85%8D%E7%BD%AE%E4%B8%AD%E5%BF%83/#more) * [微服务实战Go Micro v3 系列(六)- 综合篇(爱租房项目)](https://cleverbamboo.github.io/2021/06/08/GO/%E5%BE%AE%E6%9C%8D%E5%8A%A1%E5%AE%9E%E6%88%98Go-Micro-v3-%E7%B3%BB%E5%88%97%EF%BC%88%E5%85%AD%EF%BC%89-%E7%BB%BC%E5%90%88%E7%AF%87%EF%BC%88%E7%88%B1%E7%A7%9F%E6%88%BF%E9%A1%B9%E7%9B%AE%EF%BC%89/#more) ## httpServer 这里我们使用 gin 框架结合 go-micro 来进行编写 首先 创建一个 http 目录,并在该目录下创建 main.go,写入下面代码 ```go package main import ( httpServer "github.com/asim/go-micro/plugins/server/http/v3" "github.com/asim/go-micro/v3" "github.com/asim/go-micro/v3/logger" "github.com/asim/go-micro/v3/registry" "github.com/asim/go-micro/v3/server" "github.com/gin-gonic/gin" "go-micro-examples/http/handler" ) const ( ServerName = "go.micro.web.DemoHTTP" // server name ) func main() { // Create service srv := httpServer.NewServer( server.Name(ServerName), server.Address(":8080"), ) gin.SetMode(gin.ReleaseMode) router := gin.New() router.Use(gin.Recovery()) // register router demo := handler.NewDemo() demo.InitRouter(router) hd := srv.NewHandler(router) if err := srv.Handle(hd); err != nil { logger.Fatal(err) } // Create service service := micro.NewService( micro.Server(srv), micro.Registry(registry.NewRegistry()), ) service.Init() // Run service if err := service.Run(); err != nil { logger.Fatal(err) } } ``` ## 使用 gin 进行初始化路由 在 http 目录创建 handler\handler.go ```go package handler import ( "context" "github.com/asim/go-micro/v3" "github.com/gin-gonic/gin" helloworld "go-micro-examples/helloworld/proto" ) //demo type demo struct{} func NewDemo() *demo { return &demo{} } func (a *demo) InitRouter(router *gin.Engine) { router.POST("/demo", a.demo) } func (a *demo) demo(c *gin.Context) { // create a service service := micro.NewService() service.Init() client := helloworld.NewHelloworldService("go.micro.srv.HelloWorld", service.Client()) rsp, err := client.Call(context.Background(), &helloworld.Request{ Name: "world!", }) if err != nil { c.JSON(200, gin.H{"code": 500, "msg": err.Error()}) return } c.JSON(200, gin.H{"code": 200, "msg": rsp.Msg}) } ``` ## postman测试 在启动两个微服务之后,如下图: ![](https://z3.ax1x.com/2021/04/28/gPyeDP.png) 使用 postman 进行测试,调用成功并返回 "hello world!" ![](https://z3.ax1x.com/2021/04/28/gPyd5F.png)

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

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

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