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

作者Jack分享了如何利用go-zero框架在一周内实现一个中台系统,包括datacenter-api服务的创建、CommonRpc服务的搭建,以及在实际开发中的使用心得。go-zero提供自动化代码生成工具,简化了目录结构和组织,让开发者更专注于业务实现。文章还提及在项目实施中遇到的问题,如空字符、跨域、时间戳和emoji处理等,并给出了相应的解决方案。项目已开源,地址见文末。
摘要由CSDN通过智能技术生成

作者: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:"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值