zoukankan      html  css  js  c++  java
  • 用go-zero 写一个数据中台系统

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

    加上最近 有个投票的活动,加上最近这几年中台也比较火,所以决定玩一下,

    先聊聊中台架构思路吧,look 先看架构图

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

    先聊用户服务吧,现在一个公司有很多的公众号,小程序,微信的,支付宝的,还有xxx xxx ,很多的平台,每次开发的时候,我们总是需要做用户登陆的服务,不停的复制代码,然后我们就在思考能不能有一套独立的用户服务,

    只需要告诉我你需要传个你要登陆的平台(比如微信),微信登陆,需要的是客户端返回给服务端一个code ,然后服务端拿着这个code去微信获取用户信息,反正大家都明白,

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

    这样就写一套

    --------------------------------------------------------------------------------------------

    go-zerio:  https://github.com/tal-tech/go-zero

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

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

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

    看下目录结构

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

    最后说说遇到的坑吧:

    grpc 本人第一次用,然后就遇到了,有些字符为空时,字段值不显示的问题:

    通过grpc官方库中的jsonpb来实现,官方在它的设定中有一个结构体用来实现protoc buffer转换为JSON结构,并可以根据字段来配置转换的要求

    跨域问题:

    go-zero的设置了,感觉没有效果,大佬说通过nginx 设置,后面发现还是不行,最近 ,强行弄到了一个域名下,后面有时间再解决

    go-zero的sqlx 问题,这个真的费了很长的时间,

    time.Time 这个数据结构,数据库中用的是 timestamp 这个 比如我的字段 是delete_at 默认数库设置的是null ,结果插入的时候,
    就报了Incorrect datetime value: '0000-00-00' for column 'deleted_at' at row 1"}这个错,
    查询的时候报deleted_at": unsupported Scan, storing driver.Value type u003cnilu003e into type *time.Time"
    后面果断去掉了这个字段
    字段上面加上 .omitempty 这个标签,好像也有用,`db:".omitempty"`

    其次就是这个  Conversion from collation utf8_general_ci into utf8mb4_unicode_ci,这个导致的大概原因是,现在都喜欢用emj表情了,mysql数据识别不了

    最后发现是数据连接问题:

    mysql这边照样按照原始的方式,将配置文件修改编码格式
    重新创建数据库,并且设置数据库编码为utf8mb4 ,排序规则为utf8mb4_unicode_ci
    (这样的话,所有的表还有string字段都是这个编码格式,如果不想所有的都是,可以单独设置,这个不是重点.因为在navicat上都好设置,手动点一下就行了)
    重点来了:golang中使用的是 github.com/go-sql-driver/mysql驱动,
    将连接mysql的dsn:(因为我这使用的是gorm,所以dsn可能跟原生的格式不太一样,不过没关系,只需要关注charset和collation就行了)
    root:password@/name?parseTime=True&loc=Local&charset=utf8
    修改为:
    root:password@/name?parseTime=True&loc=Local&charset=utf8mb4&collation=utf8mb4_unicode_ci

    ---------------------------------

    mark

  • 相关阅读:
    【BZOJ1046】[HAOI2007]上升序列
    【BZOJ1045】[HAOI2008]糖果传递
    【BZOJ1044】[HAOI2008]木棍分割
    【BZOJ1041】[HAOI2008]圆上的整点
    【LG2257】YY的GCD
    【BZOJ1018】[SHOI2008]堵塞的交通
    【LG4735】最大异或和
    【POJ2182】Lost Cows
    【POJ2482】Stars in Your Window
    【POJ1733】Parity game
  • 原文地址:https://www.cnblogs.com/jackluo/p/14107817.html
Copyright © 2011-2022 走看看