go-chassis 运行时做了什么?

什么是 chassis?

Chassis,是一种微服务模式。在这种模式中,用户并不需要自己去处理构建微服务过程中外部配置、日志、健康检查、分布式追踪等,而是将他们交给专门的框架来处理。用户可以更聚焦业务逻辑本身,简单、快速的开发微服务。

阅读此文,你可以得到什么?

1.chassis 运行时做了什么2.chassis 运行时的隐藏操作。3.chassis 设计思路的一些理解

Go-Chassis 是什么?

Go-Chassis 是一个go语言的微服务开发框架,采用插件化设计,原生提供了可插拔的注册发现,加密解密,调用链追踪等组件。协议也是插件化的,支持http和grpc,也支持开发者定制私有协议, 开发者只需要专注于实现云原生应用即可。

云原生应用,基于云服务开发或者针对云服务开发部署的应用。

上图是go-chassis 的架构图,可以看出配置管理(Archaius)、服务注册(Registry)、Metrics、日志(Logger)都是独立的组件,分布式追踪、负载均衡、限流等都是以中间件(Handler Chain)的方式实现的。一个请求进来后会先通过server 转换成chassis invoker,然后经过Handler Chain,最后由Transport 转换成对应协议的response返回。

此篇文章主要关注go-chassis 启动过程时做了什么,以及做这些事情的用途。

一个例子

首先从 hello world 开始, 目录结构如下:

   .
   ├── conf                       # 配置目录,必须
   │   ├── chassis.yaml           #
   │   ├── microservice.yaml      # 微服务相关配置,比如server name,注册中心地址
   └── rest
       └── main.go

chassis.yaml 内容为:

   ---
   cse:
     protocols:
       rest:
         listenAddress: "127.0.0.1:5001"
     transport:
       timeout:
         rest: 1
     handler:
       chain:
         Provider:
           default: tracing-provider

microservice.yaml 内容为:

   cse:
     service:
       registry:
           address: http://127.0.0.1:30100


   service_description:
     name: test-rest-server

main.go

package main


import (
       rf "github.com/go-chassis/go-chassis/v2/server/restful"
       "log"
       "net/http"


       "github.com/go-chassis/go-chassis/v2"
   )


//RestFulHello is a struct used for implementation of restfull hello program
type RestFulHello struct {
}


//Sayhi is a method used to reply user with hello world text
func (r *RestFulHello) Sayhi(b *rf.Context) {
       b.Write([]byte( "hello world"))
       return
}


//URLPatterns helps to respond for corresponding API calls
func (r *RestFulHello) URLPatterns() []rf.Route {
       return []rf.Route{
           {Method: http.MethodGet, Path: "/sayhi", ResourceFunc: r.Sayhi,
               Returns: []*rf.Returns{
   {Code: 200}}},
       }
}


func main() {
   chassis.RegisterSchema("rest", &RestFulHello{})
   if err := chassis.Init(); err != nil {
       log.Fatal("Init failed." + err.Error())
       return
   }
    chassis.Run()
}

先来看一下这段代码具体做了什么。

•11~27 声明了 一个 RestFulHello struct,这个struct 有两个方法 Sayhi 和 URLPatterns,其中URLPatterns 返回一个 Route 列表。这段代码声明了一个http handler 和 对应的路由,那具体为什么这么写等下再做说明。

type Schema struct {
    serverName string
    schema     interface{}
    opts       []server.RegisterOption
}

30行 chassis.RegisterSchema("rest", &RestFulHello{}) 将前面声明的 RestFulHello 注册到 "rest" 服务。

这里内部只是简单的使用传入的参数创建一个 chassis.Schema 然后append到 chassis.schemas 中。

31行 chassis运行前的初始化工作。

35行 运行chassis 服务。

执行 go run rest/main.go 运行代码,会发现启动失败,日志输出内容为:

   INFO: Install client plugin, protocol: rest
   INFO: Install Provider Plugin, name: default
   INFO: Installed Server Plugin, protocol:rest


   ERROR: add file source error [[/var/folders/rr/rzqnl9h10y577rch1nsx_jww0000gp/T/go-build725280265/b001/exe/conf/chassis.yaml] file not exist].
   file:go-chassis@v1.8.3/chassis_init.go:106,msg:failed to initialize conf: [/var/folders/rr/rzqnl9h10y577rch1nsx_jww0000gp/T/go-build725280265/b001/exe/conf/chassis.yaml] file not exist
   init chassis fail: [/var/folders/rr/rzqnl9h10y577rch1nsx_jww0000gp/T/go-build725280265/b001/exe/conf/chassis.yaml] file not exist
   Init failed.[/var/folders/rr/rzqnl9h10y577rch1nsx_jww
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值