二,基础框架搭建

27 篇文章 0 订阅
9 篇文章 1 订阅

工程结构

首先我们来搭建工程结构,主体分为三个微服务和一个网关,还包括公共组件及部署文件等。

如图:

图片

  • deploy:部署文件目录,包括Dockerfile、k8s yaml文件等。

  • library-apigateway:结合 Consul 实现的网关。

  • library-book-grpc-service:提供 rpc 接口调用的书籍管理微服务,用于微服务内部之间的调用。

  • library-book-service:提供 restful 接口调用的书籍管理微服务。

  • library-user-service:提供 restful 接口调用的用户管理微服务。

  • pkg:公共组件目录,如读取配置、创建数据库链接、限流、熔断等。

  • protos:protobuf 文件及根据 protobuf 文件生成的 go 程序。

基础组件

在这一部分,我们先实现读取配置文件功能及创建数据库链接功能。

完整代码:

https://github.com/Justin02180218/micro-kit

图片

读取配置文件

配置文件采用 yaml 格式,在 user.yaml 配置文件中,配置了用户管理微服务的启动端口、启动模式和服务名称。MySQL 数据库的链接信息。

server:
  port: 10086
  mode: debug
  name: "user-service"

mysql:
  host: "localhost"
  port: 3306
  db: "library"
  username: "root"
  password: "123456"
  debug: true

在 config.go 中定义对应的 struct :

type ServerConfig struct {
    Port int    `json:"port" yaml:"port"`
    Mode string `json:"mode" yaml:"mode"`
    Name string `json:"name" yaml:"name"`
}

type MySQLConfig struct {
    Host     string `json:"host" yaml:"host"`
    Username string `json:"username" yaml:"username"`
    Password string `json:"password" yaml:"password"`
    Port     string `json:"port" yaml:"port"`
    Db       string `json:"db" yaml:"db"`
    Debug    bool   `json:"debug" yaml:"debug"`
}

引入"github.com/ghodss/yaml" 包解析 user.yaml :

yamlData, err := ioutil.ReadFile(file)
if err != nil {
    fmt.Println(err)
    return err
}
if err = yaml.Unmarshal(yamlData, Conf); err != nil {
    return err
}

我们在 user-service 的 main.go 中引入 config ,然后做个测试:

var confFile = flag.String("f", "user.yaml", "user config file")

func main() {
    flag.Parse()

    err := configs.Init(*confFile)
    if err != nil {
        panic(err)
    }

    fmt.Println(configs.Conf.ServerConfig.Name)
    fmt.Println(configs.Conf.ServerConfig.Port)
    fmt.Println(configs.Conf.ServerConfig.Mode)
}

执行结果:

图片

创建数据库链接

我们选用MySQL数据库作为数据存储,对象关系映射选用 gorm 类库,使用文档请参考:https://gorm.io/docs/

在 mysql.go 中引入  _ "github.com/go-sql-driver/mysql" 和 "github.com/jinzhu/gorm",初始化代码如下:

import (
    "com/justin/micro/kit/pkg/configs"
    "fmt"
    "log"
    "time"

    _ "github.com/go-sql-driver/mysql"
    "github.com/jinzhu/gorm"
)

var DB *gorm.DB

func InitMySql(cfg *configs.MySQLConfig) (err error) {
    connUrl := fmt.Sprintf("%s:%s@(%s:%s)/%s?charset=utf8&parseTime=True&loc=Local",
        cfg.Username, cfg.Password, cfg.Host, cfg.Port, cfg.Db)
    DB, err = gorm.Open("mysql", connUrl)
    if err != nil {
        log.Println(err)
        return
    }

    err = DB.DB().Ping()
    if err != nil {
        log.Println(err)
        return
    }

    if cfg.Debug {
        DB = DB.Debug()
    }
    DB.DB().SetConnMaxLifetime(time.Minute * 10)
    DB.SingularTable(true)
    return
}

在 user-service 的 main.go 中初始化数据库链接

err = databases.InitMySql(configs.Conf.MySQLConfig)
if err != nil {
    fmt.Println("load mysql failed")
}

下一篇文章,我们开始编写用户管理微服务:library-user-service

完整代码:

https://github.com/Justin02180218/micro-kit/


更多【分布式专辑】【架构实战专辑】系列文章,请关注公众号

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值