我用 go-zero 一周实现了一个中台系统,已开源!

作者:Jack

最近发现golang社区里出了一个新星的微服务框架,来自好未来,光看这个名字,就很有奔头,之前,也只是玩过go-micro,其实真正的还没有在项目中运用过,只是觉得 微服务,grpc 这些很高大尚,还没有在项目中,真正的玩过,我看了一下官方提供的工具真的很好用,只需要定义好,舒适文件jia结构 都生成了,只需要关心业务,加上最近 有个投票的活动,加上最近这几年中台也比较火,所以决定玩一下,

开源地址: https://github.com/jackluo2012/datacenter

先聊聊中台架构思路吧:

img

中台的概念大概就是把一个一个的app 统一起来,反正我是这样理解的。

先聊用户服务吧,现在一个公司有很多的公众号,小程序,微信的,支付宝的,还有xxx xxx ,很多的平台,每次开发的时候,我们总是需要做用户登陆的服务,不停的复制代码,然后我们就在思考能不能有一套独立的用户服务,只需要告诉我你需要传个你要登陆的平台(比如微信),微信登陆,需要的是客户端返回给服务端一个code ,然后服务端拿着这个code去微信获取用户信息,反正大家都明白。

我们决定,将所有的信息 弄到 配置公共服务中去,里面在存,微信,支付宝,以及其它平台的 appid ,appkey,还有支付的appid,appkey,这样就写一套。


最后说说实现吧,整个就一个repo:

  • 网关,我们用的是: go-zero的Api服务

  • 其它它的是服务,我们就是用的go-zero的rpc服务

看下目录结构

img

整个项目完成,我一个人操刀, 写了1个来星期,我就实现了上面的中台系统。

datacenter-api服务

先看官方文档 https://www.yuque.com/tal-tech/go-zero/yaoehb

我们先把网关搭建起来

➜ blogs mkdir datacenter && cd datacenter
➜ datacenter go mod init datacenter
go: creating new go.mod: module datacenter
➜ datacenter

查看book目录:

➜  datacenter tree
.
└── go.mod

0 directories, 1 file

创建api文件

➜  datacenter goctl api -o datacenter.api
Done.
➜  datacenter tree
.
├── datacenter.api
└── go.mod

定义api服务

分别包含了上面的 公共服务用户服务投票活动服务

info(
    title: "中台系统"
    desc: "中台系统"
    author: "jackluo"
    email: "net.webjoy@gmail.com"
)

// 获取 应用信息
type Beid struct {
    Beid int64 `json:"beid"`
}
type Token struct{
    Token string `json:"token"`
}
type WxTicket struct{
    Ticket string `json:"ticket"`
}
type Application struct {
    Sname string `json:"Sname"` //名称
    Logo string `json:"logo"` // login
    Isclose int64 `json:"isclose"` //是否关闭
    Fullwebsite string `json:"fullwebsite"` // 全站名称
}
type SnsReq struct{
    Beid
    Ptyid int64  `json:"ptyid"` //对应平台
    BackUrl string `json:"back_url"` //登陆返回的地址
}
type SnsResp struct{
    Beid
    Ptyid int64  `json:"ptyid"` //对应平台
    Appid string  `json:"appid"` //sns 平台的id
    Title string  `json:"title"` //名称
    LoginUrl string `json:"login_url"` //微信登陆的地址
}

type WxShareResp struct {
    Appid string `json:"appid"`
    Timestamp int64 `json:"timestamp"`
    Noncestr string `json:"noncestr"`
    Signature string `json:"signature"`
}

@server(
    group: common
)
service datacenter-api {
    @doc(
        summary: "获取站点的信息"
    )
    @handler votesVerification
    get /MP_verify_NT04cqknJe0em3mT.txt (SnsReq) returns (SnsResp)

    @handler appInfo
    get /common/appinfo (Beid) returns (Application)

    @doc(
        summary: "获取站点的社交属性信息"
    )
    @handler snsInfo
    post /common/snsinfo (SnsReq) returns (SnsResp)
    // 获取分享的
    @handler wxTicket
    post /common/wx/ticket (SnsReq) returns (WxShareResp)

}

// 上传需要登陆
@server(
    jwt: Auth
    group: common
)
service datacenter-api {
    @doc(
        summary: "七牛上传凭证"
    )
    @handler qiuniuToken
    post /common/qiuniu/token (Beid) returns (Token)
}

// 注册请求
type RegisterReq struct {
    // TODO: add members here and delete this comment
    Mobile   string `json:"mobile"` // 基本一个手机号码就完事
    Password string `json:"password"`
    Smscode    string `json:"smscode"` // 短信码
}
// 登陆请求
type LoginReq struct{
    Mobile   string `json:"mobile"`
    Type int64 `json:"type"`    // 1.密码登陆,2.短信登陆
    Password string `json:"password"`
}
// 微信登陆
type WxLoginReq struct {
    Beid      int64  `json:"beid"` // 应用id
    Code string `json:"code"` // 微信登陆密钥
    Ptyid      int64  `json:"ptyid"` // 对应平台
}

//返回用户信息
type UserReply struct {
    Auid       int64  `json:"
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
go-zero一个开源的Go语言框架,它在构建微服务和高并发应用方面具有突破性的优势。其中一个突出的特点就是它整合了masterminds/squirrel,从而实现了优雅的多数据库支持。 masterminds/squirrel是一个流行的SQL查询构建器,它以非常直观和灵活的方式提供了编写SQL查询的功能。而go-zero在此基础上做了进一步的封装和优化,使得使用者能够更加方便地编写和执行SQL查询。 首先,go-zero提供了一组简洁而强大的API,使得构建SQL查询非常容易。开发者只需要按照一定的约定来创建查询参数和条件,然后使用go-zero提供的API来构建查询语句,即可完成复杂的SQL查询。 其次,go-zero还增加了一些高级功能,进一步提升了多数据库查询的灵活性和性能。例如,它支持数据库连接池管理,可以动态调整数据库连接数以适应并发请求;还支持分表分库功能,可以按照一定的规则将数据分散存储在不同的数据库或表中,从而提高查询效率。 最重要的是,go-zero通过内置的代码生成工具,提供了自动化生成数据库访问代码的能力。开发者只需要定义数据表的结构,然后运行代码生成工具,就能够自动生成包含增删改查等一系列数据库操作的代码。这极大地提高了开发效率,减少了出错的机会。 综上所述,go-zero整合了masterminds/squirrel,通过提供简洁强大的API、高级功能和自动化代码生成工具,实现了优雅的多数据库支持。它在微服务和高并发应用场景下的表现突出,为开发者提供了极大的便利和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值