首页>>后端>>Golang->go最好的微服务框架(go比较好的微服务框架)

go最好的微服务框架(go比较好的微服务框架)

时间:2023-12-05 本站 点击:0

go-zero框架分享

最近go-zero微服务开源框架非常火热,golang社区里的新星微服务框架。

来自好未来,光看这个名字,就很有奔头

麻雀虽小五脏俱全。

文档

Go - Micro微服务框架实践 - API(十三)

Micro的api就是api网关

API参考了 API网关模式 为服务提供了一个单一的公共入口。基于服务发现,使得micro api可以提供具备http及动态路由的服务。

Micro的API基于HTTP协议。请求的API接口通过HTTP协议访问,并且路由是基于服务发现机制向下转发的。 Micro API在 go-micro 之上开发,所以它集成了服务发现、负载均衡、编码及基于RPC的通信。

因为micro api内部使用了go-micro,所以它自身也是可插拔的。 参考 go-plugins 了解对gRPC、kubernetes、etcd、nats、及rabbitmq等支持。另外,api也使用了 go-api ,这样,接口handler也是可以配置的。

ACME( Automatic Certificate Management Environment)是由 Let’s Encrypt 制定的安全协议。

可以选择是否配置白名单

API服务支持TLS证书

API使用带分隔符的命名空间来在逻辑上区分后台服务及公开的服务。命名空间及http请求路径会用于解析服务名与方法,比如 GET /foo HTTP/1.1 会被路由到 go.micro.api.foo 服务上。

API默认的命名空间是 go.micro.api ,当然,也可以修改:

我们演示一个3层的服务架构:

完整示例可以参考: examples/greeter

先决条件:我们使用Consul作为默认的服务发现,所以请先确定它已经安装好了,并且已经运行,比如执行 consul agent -dev 这样子方式运行。

向micro api发起http请求

HTTP请求的路径 /greeter/say/hello 会被路由到服务 go.micro.api.greeter 的方法 Say.Hello 上。

绕开api服务并且直接通过rpc调用:

使用JSON的方式执行同一请求:

micro api提供下面类型的http api接口

请看下面的例子

Handler负责持有并管理HTTP请求路由。

默认的handler使用从注册中心获取的端口元数据来决定指向服务的路由,如果路由不匹配,就会回退到使用”rpc” hander。在注册时,可以通过 go-api 来配置路由。

API有如下方法可以配置请求handler:

通过 /rpc 入口可以绕开handler处理器。

API处理器接收任何的HTTP请求,并且向前转发指定格式的RPC请求。

RPC处理器接收json或protobuf格式的HTTP POST请求,然后向前转成RPC请求。

代理Handler其实是内置在服务发现中的反向代理服务。

事件处理器使用go-micro的broker代理接收http请求并把请求作为消息传到消息总线上。

Web处理器是,它是内置在服务发现中的HTTP反向代理服务,支持web socket。

/rpc 端点允许绕过主handler,然后与任何服务直接会话。

示例:

更多信息查看可运行的示例: github.com/micro/examples/api

解析器,Micro使用命名空间与HTTP请求路径来动态路由到具体的服务。

API命名的空间是 go.micro.api 。可以通过指令 --namespace 或者环境变量 MICRO_NAMESPACE= 设置命名空间。

下面说一下解析器是如何使用的:

RPC解析器示例中的RPC服务有名称与方法,分别是 go.micro.api.greeter , Greeter.Hello 。

URL会被解析成以下几部分:

带版本号的API URL也可以很容易定位到具体的服务:

代理解析器只处理服务名,所以处理方案和RPC解析器有点不太一样。

URL会被解析成以下几部分:

Go语言做Web应用开发的框架,哪一个更适合入门

可以先直接使用go自带的http server 框架,这个框架涵盖了绝大多数的功能,比如request response 的基本封装,简单的路由管理,文件上传处理。

如果发现Go 自带的框架解决不了问题,可以引入相应的第三方组件,比如ORM可以采用中国人写的gorm 比如web 的session 管理可以使用gorilla/session

当然你也可以直接上大一统的框架比如你提到的beego 还有大名鼎鼎的martini 。不过不推荐,因为这样的大框架和Go 语言本身的模块设计有冲突。

实际开发建议用vscode 加Go 插件来做IDE,基本包含了其他成熟IDE的所有功能,而且还自带强大的debug 功能。其他IDE debug 用起来非常麻烦比如idea 和liteIDE。题主也可以自己试下。

GoLang -- Gin框架

• 何为框架:

框架一直是敏捷开发中的利器,能让开发者很快的上手并做出应用,甚至有的时候,脱离了框架,一些开发者都不会写程序了。成长总不会一蹴而就,从写出程序获取成就感,再到精通框架,快速构造应用,当这些方面都得心应手的时候,可以尝试改造一些框架,或是自己创造一个。

Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,已经发布了1.0版本。具有快速灵活,容错方便等特点。其实对于golang而言,web框架的依赖要远比Python,Java之类的要小。自身的net/http足够简单,性能也非常不错。框架更像是一些常用函数或者工具的集合。借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范。

(1)首先需要安装,安装比较简单,使用go get即可

go get github.com/gin-gonic/gin

如果安装失败,直接去Github clone下来,放置到对应的目录即可。

(2)代码中使用:

下面是一个使用Gin的简单例子:

package main

import (

"github.com/gin-gonic/gin"

)

func main() {

router := gin.Default()

router.GET("/ping", func(c *gin.Context) {

c.JSON(200, gin.H{

"message": "pong",

})

})

router.Run(":8080") // listen and serve on 0.0.0.0:8080

}

简单几行代码,就能实现一个web服务。使用gin的Default方法创建一个路由handler。然后通过HTTP方法绑定路由规则和路由函数。不同于net/http库的路由函数,gin进行了封装,把request和response都封装到gin.Context的上下文环境。最后是启动路由的Run方法监听端口。麻雀虽小,五脏俱全。当然,除了GET方法,gin也支持POST,PUT,DELETE,OPTION等常用的restful方法。

Gin可以很方便的支持各种HTTP请求方法以及返回各种类型的数据,详情可以前往查看。

2.1 匹配参数

我们可以使用Gin框架快速的匹配参数,如下代码所示:

冒号:加上一个参数名组成路由参数。可以使用c.Param的方法读取其值。当然这个值是字串string。诸如/user/rsj217,和/user/hello都可以匹配,而/user/和/user/rsj217/不会被匹配。

浏览器输入以下测试:

返回结果为:

其中c.String是gin.Context下提供的方法,用来返回字符串。

其中c.Json是gin.Context下提供的方法,用来返回Json。

下面我们使用以下gin提供的Group函数,方便的为不同的API进行分类。

我们创建了一个gin的默认路由,并为其分配了一个组 v1,监听hello请求并将其路由到视图函数HelloPage,最后绑定到 0.0.0.0:8000

C.JSON是Gin实现的返回json数据的内置方法,包含了2个参数,状态码和返回的内容。http.StatusOK代表返回状态码为200,正文为{"message": “welcome"}。

注:Gin还包含更多的返回方法如c.String, c.HTML, c.XML等,请自行了解。可以方便的返回HTML数据

我们在之前的组v1路由下新定义一个路由:

下面我们访问

可以看到,通过c.Param(“key”)方法,Gin成功捕获了url请求路径中的参数。同理,gin也可以捕获常规参数,如下代码所示:

在浏览器输入以下代码:

通过c.Query(“key”)可以成功接收到url参数,c.DefaultQuery在参数不存在的情况下,会由其默认值代替。

我们还可以为Gin定义一些默认路由:

这时候,我们访问一个不存在的页面:

返回如下所示:

下面我们测试在Gin里面使用Post

在测试端输入:

附带发送的数据,测试即可。记住需要使用POST方法.

继续修改,将PostHandler的函数修改如下

测试工具输入:

发送的内容输入:

返回结果如下:

备注:此处需要指定Content-Type为application/x-www-form-urlencoded,否则识别不出来。

一定要选择对应的PUT或者DELETE方法。

Gin框架快速的创建路由

能够方便的创建分组

支持url正则表达式

支持参数查找(c.Param c.Query c.PostForm)

请求方法精准匹配

支持404处理

快速的返回给客户端数据,常用的c.String c.JSON c.Data

《Go Micro 微服务》之安装体验

首先保证 Git 和 Go 已经安装成功。可以参考:

其次配置好 GOPATH 环境变量。

Go Micro 是基于 Go 语言用于开发的微服务的 RPC 框架,它是 Micro 的基础,执行下面当命令安装:

核心是 gogetgithub.com/micro/go-micro,但一些包需预先安装好(由于网络或映射原因)。

Protocol Buffers (a.k.a., protobuf) 是 Google 的数据交换格式。 在 下载安装源码,编译安装。本文选择的 cpp 的版本:

还需要安装 Go 对 Protobuf 的支持,和 Protobuf 代码生成器:

Micro 用于提供构建微服务的关键元素集合。

时间会比较久。

至此一个基本的 Go Micro 环境就安装完毕。

官方网站给了一个测试用例,我们先体验一下:

先安装官方测试案例 srv:

安装完成后,会在 $GOPATH/bin 下生成 srv 执行文件,启动他。本文已经将 $GOPATH/bin 设置到环境变量 path 中。

通过命令查看当前运行的微服务实例:

调用微服务:

得到以上结果,表示 Go Micro 的相关产品安装完毕!

Go - Micro微服务框架实践 - Proxy(十五)

micro proxy 其实就是客户端的代理。

如果服务运行环境不能直接访问,那么就需要通过代理来访问,micro proxy就是来干这事的,它提供http api,这个api可以把客户端的请求转向那些没有直接暴露给客户端的服务。

代理基于go-micro开发,也就是说它是依赖服务发现的。

安装Consul

Micro代理默认是运行在8081端口下。

启动代理:

服务默认使用ACME安全协议

可以选择性配置主机白名单

命令行如果要指定代理,可以像下面这样设置:


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/Golang/12616.html