a microservice framework for rapid development of micro services in Go with rich eco-system

Overview

Coverage Status Go Report Card GoDoc HitCount
goproxy.cn Documentation Status

中文版README

Go-Chassis is a microservice framework for rapid development of microservices in Go. it focus on helping developer to deliver cloud native application more easily. The idea of logo is, developer can recreate and customize their own "wheel"(a framework) by go chassis to accelarate the delivery of software.

Why use Go chassis

  • powerful middleware "handler chain": powerful than "filter" or "interceptor". each handler in chain is able to get the running result of backward handler and your business logic. It is very useful in varies of scenario, for example:
  1. a circuit breaker need to check command results
  2. track response status and record it, so that prometheus can collect them
  3. track critical response result, so that you can audit them
  4. distribute tracing, you can complete the end span spec after business logic executed

the commonplace above is helping you decouple common function from business logic. without handler chain. those function will couple with business logic

  • go chassis is designed as a protocol-independent framework, any protocol is able to integrate with go chassis and leverage same function like load balancing, circuit breaker,rate limiting, routing management, those function resilient your service

  • go chassis makes service observable by bringing open tracing and prometheus to it.

  • go chassis is flexible, many different modules can be replaced by other implementation, like registry, metrics, handler chain, config server etc

  • With many build-in function like route management, circuit breaker, load balancing, monitoring etc, your don't need to investigate, implement and integrate many solutions yourself.

Features

  • Pluggable discovery service: Support Service center, kubernetes. fit both client side discovery and server side discovery pattern, and you can disable service discovery to use end to end communication.
  • Pluggable Protocol: You can customize protocol, by default support http and grpc, go chassis define standardized model to makes all request of different protocol leverage same features
  • Multiple server management: you can separate API by protocols and ports
  • Handler Chain: Able to add your own code during service calling for client and server side
  • rich middleware: based on handler chain, supply circuit breaker, rate limiting, monitoring, auth features. see
  • Traffic marker Traffic marker module is able to mark requests in both client(consumer) or server(provider) side, with marker, you can govern traffic based on it.
  • Traffic management: Able to route to different service based on weight and match rule, it can be used in many scenario, such as canary release
  • Security: build in cipher, authentication, RSA related funtions
  • Safety and resilience: support fault-tolerant(retry, rate limiting, client-side load-balancing, circuit breaker) to makes your service facing any unpredictable situation.
  • Telemetry: Able to expose Prometheus metric API automatically and customize metrics report. Use opentracing-go as standard library.
  • Backing services: use backend service as a plugin, so that your app can be easily tested, and swap to another plugin.
  • Hot re-configuration: Powered by go-archaius, configurations can be reload in runtime, like load balancing, circuit breaker, rate limiting, developer is also able to develop a service which has hot-reconfiguration feature easily. see
  • API first go chassis will automatically generate Open API 2.0 doc and register it to service center. you can manage all the API docs in one place
  • Spring Cloud integrate with servicecomb, go chassis can work together with spring cloud.
  • Service mesh: you can introduce multi-language to your microservice system. powered by servicecomb-mesher.
  • Less dependencies: checkout the go.mod file, it has less dependency on open source project by default, to import more features checkout plugins to see more features

Get started

1.Generate go mod

go mod init

2.Add go chassis

 go get github.com/go-chassis/go-chassis/[email protected]

if you are facing network issue

export GOPROXY=https://goproxy.io

3.Write your first http micro service

Documentations

You can see more documentations in here,

Examples

You can check examples here

NOTICE: Now examples is migrating to here

Communication Protocols

Go-Chassis supports 2 types of communication protocol.

  1. http - an approach that leverages the HTTP protocol for communication.
  2. gRPC - native grpc protocol, go chassis bring circuit breaker, route management etc to grpc.

Debug suggestion for dlv:

Add -tags debug into go build arguments before debugging, if your go version is go1.10 onward.

example:

go build -tags debug -o server -gcflags "all=-N -l" server.go

Chassis customized debug tag to resolve dlv debug issue:

https://github.com/golang/go/issues/23733

https://github.com/derekparker/delve/issues/865

Other project using go-chassis

Known Users

To register your self, go to https://github.com/go-chassis/go-chassis/issues/592

huawei qutoutiao Shopee ieg

Contributing

If you're interested in being a contributor and want to get involved in developing, please check CONTRIBUTING and wiki for details.

Join slack

Committer

  • ichiro999
  • humingcheng
Comments
  • This is not inspired by go-micro

    This is not inspired by go-micro

    This is not inspired by go-micro. It's literally lifting and shifting code. I can see my actual code everywhere. Maybe come discuss how you can leverage go-micro rather than just taking code.

    opened by asim 53
  • too many colons in address

    too many colons in address

    I forward a request to a microservice through the gateway center get an error

    image and Dashboard in the service center image It is normal to not directly pass the micro-service through the gateway center forwarding.

    enhancement 
    opened by Victoryship 13
  • fatal error: concurrent map writes for service discovery

    fatal error: concurrent map writes for service discovery

    fatal error: concurrent map writes
    
    goroutine 116 [running]:
    runtime.throw(0x10b7e63, 0x15)
            /usr/local/go/src/runtime/panic.go:608 +0x72 fp=0xc0003261e8 sp=0xc0003261b8 pc=0x42c082
    runtime.mapassign_faststr(0xf2c100, 0xc0006ffd70, 0x10b421f, 0x12, 0xc000964ab8)
            /usr/local/go/src/runtime/map_faststr.go:275 +0x3bf fp=0xc000326250 sp=0xc0003261e8 pc=0x41260f
    github.com/go-chassis/go-chassis/core/registry.(*noIndexCache).Set(0xc00078b270, 0x10b421f, 0x12, 0xeb6080, 0xc000845960)
            /Users/jiangecho/go/src/github.com/go-chassis/go-chassis/core/registry/cache_index.go:37 +0x1ba fp=0xc0003262d0 sp=0xc000326250 pc=0x9ad0ba
    github.com/go-chassis/go-chassis/core/registry.(*indexCache).Set(0xc000703920, 0x10b421f, 0x12, 0xeb6080, 0xc000845960)
            /Users/jiangecho/go/src/github.com/go-chassis/go-chassis/core/registry/cache_index.go:98 +0x5a fp=0xc000326308 sp=0xc0003262d0 pc=0x9ad8ca
    github.com/go-chassis/go-chassis/core/registry.RefreshCache(0x10b421f, 0x12, 0xc00000c170, 0x1, 0x1, 0xc000326718)
            /Users/jiangecho/go/src/github.com/go-chassis/go-chassis/core/registry/healthz.go:172 +0xb61 fp=0xc000326698 sp=0xc000326308 pc=0x9b0071
    github.com/go-chassis/go-chassis/core/registry/servicecenter.filterReIndex(0xc0008458e0, 0x1, 0x4, 0x10b421f, 0x12, 0x10a9c4b, 0x7)
            /Users/jiangecho/go/src/github.com/go-chassis/go-chassis/core/registry/servicecenter/cache.go:295 +0x4a3 fp=0xc0003267e8 sp=0xc000326698 pc=0xa8d4a3
    github.com/go-chassis/go-chassis/core/registry/servicecenter.(*ServiceDiscovery).FindMicroServiceInstances(0xc00012a080, 0xc0000961e0, 0x28, 0x10b421f, 0x12, 0x0, 0x0, 0x0, 0xf1ae80, 0x203000, ...)
            /Users/jiangecho/go/src/github.com/go-chassis/go-chassis/core/registry/servicecenter/servicecenter.go:331 +0x6b6 fp=0xc000326978 sp=0xc0003267e8 pc=0xa94f56
    github.com/go-chassis/go-chassis/core/loadbalancer.BuildStrategy(0xc0000961e0, 0x28, 0x10b421f, 0x12, 0x10a66de, 0x4, 0x0, 0x0, 0x0, 0x0, ...)
            /Users/jiangecho/go/src/github.com/go-chassis/go-chassis/core/loadbalancer/load_balancer.go:57 +0x10f fp=0xc000326af8 sp=0xc000326978 pc=0x9b993f
    github.com/go-chassis/go-chassis/core/handler.(*LBHandler).getEndpoint(0x1a37100, 0xc0009667e0, 0x10acb81, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
            /Users/jiangecho/go/src/github.com/go-chassis/go-chassis/core/handler/loadbalance_handler.go:50 +0x1dc fp=0xc000326d30 sp=0xc000326af8 pc=0x9dc27c
    github.com/go-chassis/go-chassis/core/handler.(*LBHandler).handleWithNoRetry(0x1a37100, 0xc0007a2940, 0xc0009667e0, 0x10acb81, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
            /Users/jiangecho/go/src/github.com/go-chassis/go-chassis/core/handler/loadbalance_handler.go:94 +0x6d fp=0xc000326de0 sp=0xc000326d30 pc=0x9dcedd
    github.com/go-chassis/go-chassis/core/handler.(*LBHandler).Handle(0x1a37100, 0xc0007a2940, 0xc0009667e0, 0xc00014ef60)
            /Users/jiangecho/go/src/github.com/go-chassis/go-chassis/core/handler/loadbalance_handler.go:87 +0x16c fp=0xc000326fe0 sp=0xc000326de0 pc=0x9dce5c
    github.com/go-chassis/go-chassis/core/handler.(*Chain).Next(0xc0007a2940, 0xc0009667e0, 0xc00014ef60)
            /Users/jiangecho/go/src/github.com/go-chassis/go-chassis/core/handler/handler_chain.go:42 +0x78 fp=0xc000327010 sp=0xc000326fe0 pc=0x9db288
    github.com/go-chassis/go-chassis/core/handler.(*RouterHandler).Handle(0x1a37100, 0xc0007a2940, 0xc0009667e0, 0xc00014ef60)
            /Users/jiangecho/go/src/github.com/go-chassis/go-chassis/core/handler/router_handler.go:41 +0x2f2 fp=0xc000327350 sp=0xc000327010 pc=0x9ddd62
    github.com/go-chassis/go-chassis/core/handler.(*Chain).Next(0xc0007a2940, 0xc0009667e0, 0xc00014ef60)
            /Users/jiangecho/go/src/github.com/go-chassis/go-chassis/core/handler/handler_chain.go:42 +0x78 fp=0xc000327380 sp=0xc000327350 pc=0x9db288
    github.com/go-chassis/go-chassis/core/handler.(*ConsumerRateLimiterHandler).Handle(0x1a37100, 0xc0007a2940, 0xc0009667e0, 0xc00014ef60)
            /Users/jiangecho/go/src/github.com/go-chassis/go-chassis/core/handler/qps_consumer_flow_control_handler.go:23 +0x104 fp=0xc0003274d0 sp=0xc000327380 pc=0x9dd624
    github.com/go-chassis/go-chassis/core/handler.(*Chain).Next(0xc0007a2940, 0xc0009667e0, 0xc00014ef60)
            /Users/jiangecho/go/src/github.com/go-chassis/go-chassis/core/handler/handler_chain.go:42 +0x78 fp=0xc000327500 sp=0xc0003274d0 pc=0x9db288
    github.com/go-chassis/go-chassis/core.(*abstractInvoker).invoke(0xc0008342a0, 0xc0009667e0, 0xc0009667e0, 0x1)
            /Users/jiangecho/go/src/github.com/go-chassis/go-chassis/core/invoker.go:47 +0x295 fp=0xc000327578 sp=0xc000327500 pc=0xb51b15
    github.com/go-chassis/go-chassis/core.(*RPCInvoker).Invoke(0xc0007e8420, 0x121ab20, 0xc0000a2018, 0x10b421f, 0x12, 0x10ba308, 0x17, 0x10b0b47, 0xf, 0x1016b60, ...)
            /Users/jiangecho/go/src/github.com/go-chassis/go-chassis/core/rpc_invoker.go:47 +0x317 fp=0xc000327818 sp=0xc000327578 pc=0xb522c7
    github.com/brocaar/loraserver/rpcCenter/client.(*UplinkClient).HandleRXPackets(0x1a36bc0, 0x600000000000000, 0x0, 0x0, 0x0, 0x19d1b9d8, 0x0, 0x0, 0x0, 0xc000806729, ...)
    
    
    opened by jiangecho 12
  • how to register paths into SC

    how to register paths into SC

    1. current register, have not registe paths info to SC, and other microservice can not find it.

    2. both chassis.yaml microservice.yaml can have APPLICATION_ID item, which is the effetive ?

    In our case, we dynamic generate chassis.yaml file before init go-chassis, the listening IP address and port and SSL config and SC address are passed from deploy phase use microservice.yaml store static info

    enhancement 
    opened by daqingshu 12
  • benchmark问题

    benchmark问题

    我们使用benchmark测试,发现如下问题

    2018-08-01 10:05:32.313 +08:00 INFO highway/highway_base_client.go:77 GetClient from new open addr:127.0.0.1:8082
    2018-08-01 10:05:32.322 +08:00 ERROR highway/highway_msgobj.go:238 Unmarshal response body  failed error: proto: invalid UTF-8 string
    2018-08-01 10:05:32.322 +08:00 ERROR highway/highway_msgobj.go:201 Frame head error. error: Invalid magicID
    Error have occured:  Expected Msg: , But: 
    2018-08-01 10:05:32.331 +08:00 ERROR highway/highway_msgobj.go:238 Unmarshal response body  failed error: proto: invalid UTF-8 string
    2018-08-01 10:05:32.331 +08:00 ERROR highway/highway_msgobj.go:201 Frame head error. error: Invalid magicID
    Error have occured:  Expected Msg: , But: 
    2018-08-01 10:05:32.336 +08:00 ERROR highway/highway_msgobj.go:238 Unmarshal response body  failed error: proto: invalid UTF-8 string
    2018-08-01 10:05:32.337 +08:00 ERROR highway/highway_msgobj.go:201 Frame head error. error: Invalid magicID
    Error have occured:  Expected Msg: , But: 
    2018-08-01 10:05:32.349 +08:00 ERROR highway/highway_msgobj.go:238 Unmarshal response body  failed error: proto: invalid UTF-8 string
    2018-08-01 10:05:32.349 +08:00 ERROR highway/highway_msgobj.go:201 Frame head error. error: Invalid magicID
    Error have occured:  Expected Msg: , But: 
    2018-08-01 10:05:32.457 +08:00 ERROR highway/highway_msgobj.go:238 Unmarshal response body  failed error: proto: invalid UTF-8 string
    2018-08-01 10:05:32.457 +08:00 ERROR highway/highway_msgobj.go:201 Frame head error. error: Invalid magicID
    Error have occured:  Expected Msg: , But: 
    2018-08-01 10:05:32.462 +08:00 ERROR highway/highway_msgobj.go:238 Unmarshal response body  failed error: proto: invalid UTF-8 string
    2018-08-01 10:05:32.462 +08:00 ERROR highway/highway_msgobj.go:201 Frame head error. error: Invalid magicID
    Error have occured:  Expected Msg: , But: 
    2018-08-01 10:05:32.465 +08:00 ERROR highway/highway_msgobj.go:238 Unmarshal response body  failed error: proto: invalid UTF-8 string
    2018-08-01 10:05:32.466 +08:00 ERROR highway/highway_msgobj.go:201 Frame head error. error: Invalid magicID
    Error have occured:  Expected Msg: , But: 
    2018-08-01 10:05:32.491 +08:00 ERROR highway/highway_msgobj.go:238 Unmarshal response body  failed error: proto: invalid UTF-8 string
    2018-08-01 10:05:32.491 +08:00 ERROR highway/highway_msgobj.go:201 Frame head error. error: Invalid magicID
    Error have occured:  Expected Msg: , But: 
    2018-08-01 10:05:32.497 +08:00 ERROR highway/highway_msgobj.go:238 Unmarshal response body  failed error: proto: invalid UTF-8 string
    2018-08-01 10:05:32.497 +08:00 ERROR highway/highway_msgobj.go:201 Frame head error. error: Invalid magicID
    Error have occured:  Expected Msg: , But: 
    2018-08-01 10:05:32.516 +08:00 ERROR highway/highway_msgobj.go:238 Unmarshal response body  failed error: proto: invalid UTF-8 string
    2018-08-01 10:05:32.516 +08:00 ERROR highway/highway_msgobj.go:201 Frame head error. error: Invalid magicID
    Error have occured:  Expected Msg: , But: 
    2018-08-01 10:05:32.555 +08:00 ERROR highway/highway_msgobj.go:238 Unmarshal response body  failed error: proto: invalid UTF-8 string
    2018-08-01 10:05:32.555 +08:00 ERROR highway/highway_msgobj.go:201 Frame head error. error: Invalid magicID
    Error have occured:  Expected Msg: , But: 
    2018-08-01 10:05:32.620 +08:00 ERROR highway/highway_msgobj.go:238 Unmarshal response body  failed error: proto: invalid UTF-8 string
    2018-08-01 10:05:32.620 +08:00 ERROR highway/highway_msgobj.go:201 Frame head error. error: Invalid magicID
    Error have occured:  Expected Msg: , But: 
    2018-08-01 10:05:32.630 +08:00 ERROR highway/highway_msgobj.go:238 Unmarshal response body  failed error: proto: invalid UTF-8 string
    2018-08-01 10:05:32.630 +08:00 ERROR highway/highway_msgobj.go:201 Frame head error. error: Invalid magicID
    Error have occured:  Expected Msg: , But: 
    2018-08-01 10:05:32.630 +08:00 ERROR highway/highway_base_client.go:242 AsyncSendMsg err: error: write tcp 127.0.0.1:49353->127.0.0.1:8082: use of closed network connection
    2018-08-01 10:05:32.630 +08:00 ERROR handler/transport_handler.go:47 Call got Error error: write tcp 127.0.0.1:49353->127.0.0.1:8082: use of closed network connection
    panic: write tcp 127.0.0.1:49353->127.0.0.1:8082: use of closed network connection
    
    goroutine 92 [running]:
    main.Call(0xbed0633b12d012be, 0x178d650, 0x4fbac20, 0xc42000c240, 0x0, 0x0, 0x0, 0x4a158c6, 0x7, 0x4e20, ...)
    	/Users/heavyrainlee/go/src/github.com/go-chassis/go-chassis/benchmark/client/main.go:141 +0x9ce
    created by main.main
    	/Users/heavyrainlee/go/src/github.com/go-chassis/go-chassis/benchmark/client/main.go:115 +0x5e4
    

    测试使用的是highway,测试方法就是修改benchmark/client/conf/test.yaml,把最后一行改为

    protocol: highway
    

    复现概率为偶现,10次能出1次的大概概率

    bug 
    opened by tomlee0201 12
  • Using random port to start server

    Using random port to start server

    For Issue #524 Ability to use random port to start server, just using :0 as port, example: listenAddress: 0.0.0.0:0 允许使用随机端口监听服务,该修改已可以满足当前使用,未大幅度更改当前启动机制,请检视代码以确认代码更改合理性

    opened by yockii 11
  • 同一个微服务客户端,当访问不通的http url,能路由到不同的微服务

    同一个微服务客户端,当访问不通的http url,能路由到不同的微服务

    同一个微服务客户端,当访问不通的http url,能路由到不同的微服务:

    例如: 微服务客户端:client_a 微服务1:micro_service_1(100.100.100.101:5001) 微服务2:micro_service_2(100.100.100.102:5001)

    当 client_a 访问 http://MicroServer/path1 时,路由到 micro_service_1 当 client_a 访问 http://MicroServer/path2 时,路由到 micro_service_2

    这个路由策略目前是否已经支持?

    另外: 1、如果一个micro-service是有状态的,go-chassis是否支持client总是能将状态相关的两个request路由到相同的micro-sercice?

    感谢!

    opened by fffmonkeyking 10
  • [error] servicecenter/cache.go:222 Refresh local instance cache failed: batch fined failed, status 404, body 404 page not found

    [error] servicecenter/cache.go:222 Refresh local instance cache failed: batch fined failed, status 404, body 404 page not found

    更新go-chassis版本后,出现如下错误: Refresh local instance cache failed: batch fined failed, status 404, body 404 page not found

    看了一下代码,这个错是在go-sc-client中定义的,所以也更新了go-sc-client版本,错误依旧。

    ps: 没有使用go1.11的module。

    opened by sundayslove 10
  • #859 refactor config item for 2.0

    #859 refactor config item for 2.0

    进行了不兼容的配置项重构,理由是因为配置命名风格不一致,配置所处层级位置不合理,cse是商业产品的名字:

    • cse统一替换为servicecomb
    • 微服务描述挪到了servicecomb.service下
    • 注册发现配置挪到了servicecomb.registry下
    • 文档适配新配置
    • cse前缀的配制方法不再支持
    • rest调用不再支持cse://写法
    • 删除tenant这种没用的配置项
    • 删除highway example
    opened by tianxiaoliang 9
  • How do I know if the framework started

    How do I know if the framework started

    I wrote the example of communication, but I don't know if it started go-chassis. Because my service center has always been empty. According to the example, what uri to visit is to check it.

    我模仿communication例子写的,但我不知道是否启动了go-chassis。因为我的service center 一直是空的。请问按照例子写的是该访问哪个uri查看呢。

    image

    image

    image

    image

    opened by Victoryship 9
  • context deadline exceeded (Client.Timeout exceeded while awaiting headers)

    context deadline exceeded (Client.Timeout exceeded while awaiting headers)

    Describe the bug 服务间调用,发现大约会30秒超时,但是没用找到这个超时的配置在哪

    Version of go chassis

    • gochassis 1.8.3

    Logs

    : context deadline exceeded (Client.Timeout exceeded while awaiting headers)

    bug 
    opened by MakeYuan-Driver 8
  • Incorrect annotation

    Incorrect annotation

    https://github.com/go-chassis/go-chassis/blob/495ed81e9b2b0420c66a02c44f867a9ab2f26d93/server/restful/router.go#L30

    As for ResourceFunc, you must set this field or itself? It would be better if the annotation is "the func this API calls. you must set this field or ResourceFuncName, if you set both, ResourceFunc will be used"

    opened by peterqiu07 0
  • /apidocs.json可以看接口信息,没有配置开关,建议提供开关,能关闭

    /apidocs.json可以看接口信息,没有配置开关,建议提供开关,能关闭

    Describe the bug A clear and concise description of what the bug is.

    Version of go chassis 最新版本

    To Reproduce Steps to reproduce the behavior: 启动服务之后,直接调用/apidocs.json即可展示 Logs

    bug 
    opened by aseTo2016 1
  • go-chassis/go-archaius的哪个版本支持对接cse2.0的配置中心,配套的go-chassis/go-chassis/v2要求是哪个版本

    go-chassis/go-archaius的哪个版本支持对接cse2.0的配置中心,配套的go-chassis/go-chassis/v2要求是哪个版本

    Is your feature request related to a problem? Please describe. A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

    Describe the solution you'd like A clear and concise description of what you want to happen.

    Describe alternatives you've considered A clear and concise description of any alternative solutions or features you've considered.

    Additional context Add any other context or screenshots about the feature request here.

    opened by CJD666 2
  • Register2GoRestful为什么不支持OPTIONS方法注册呢?

    Register2GoRestful为什么不支持OPTIONS方法注册呢?

    Discussed in https://github.com/go-chassis/go-chassis/discussions/1036

    Originally posted by JipinNa June 17, 2022 https://github.com/go-chassis/go-chassis/blob/f19180301881b6f876dfdbf4fe8cfbbba0ee6c47/server/restful/restful_server.go#L181

    enhancement 
    opened by JipinNa 0
  • 支持读取kie配置中心指定project下的配置

    支持读取kie配置中心指定project下的配置

    当前代码支持读取默认project (default)下的配置。 与spring-huawei-cloud-config 对齐 通过如下配置读取 对应kie server:/v1/test/kie/kv

    servicecomb:
      credentials:
        project: test  
    
    opened by liweiv 7
  • support kie custom label

    support kie custom label

    I used kie as the config server. I wanna add custom labels, such as project,product. but there are no way to set custom labels in config file. however this feature had finished in spring cloud huawei config(only one label). spring-cloud-huawei-config:

    kie:
      customLabel: labelKey
      customLabel: labelValue
    

    expect go-chassis supporting

    kie:
      customLabels:
        - key: labelKey
          value: labelValue
        - key: labelKey2
          value: labelValue2 
    
    enhancement 
    opened by liweiv 1
Releases(v2.7.0)
  • v2.7.0(Sep 23, 2022)

    Feature:

    Monitoring

    • Get gauge value API
    • Get summary value API
    • Able to observe metrics by API pattern and method name

    Improvement:

    Reliability

    • if provider is 0, go chassis will not set local cache and query service center for every reuquest to provider, that causes heavy load to service center. Now it won't query service center by setting a empty cache.

    Full Changelog: https://github.com/go-chassis/go-chassis/compare/v2.6.0...v2.7.0

    Source code(tar.gz)
    Source code(zip)
  • v2.6.0(Aug 17, 2022)

    Feature:

    • Support ServiceComb RBAC(only for service discovery) doc
    • Codec tool #1059 doc

    Improvement:

    • upgrade to support go 1.18

    New Contributors

    • @kaylazqq

    Full Changelog: https://github.com/go-chassis/go-chassis/compare/v2.5.2...v2.6.0

    Source code(tar.gz)
    Source code(zip)
  • v2.5.2(Aug 9, 2022)

    What's Changed

    • add assertion to make sure http reponse can return back by @tianxiaoliang in https://github.com/go-chassis/go-chassis/pull/1033
    • allow logRotateAge option to be set to 0 by @kkf1 in https://github.com/go-chassis/go-chassis/pull/1049

    New Contributors

    • @kkf1 made their first contribution in https://github.com/go-chassis/go-chassis/pull/1049

    Full Changelog: https://github.com/go-chassis/go-chassis/compare/v2.5.1...v2.5.2

    Source code(tar.gz)
    Source code(zip)
  • v2.5.1(Jul 14, 2022)

  • v2.5.0(Jul 6, 2022)

    Feature:

    • add cors support (https://github.com/go-chassis/go-chassis/pull/1021)
    • 可禁止重定向(https://github.com/go-chassis/go-chassis/commit/f19180301881b6f876dfdbf4fe8cfbbba0ee6c47)
    • support multipart/form-data

    Improvement:

    Bug fix:

    • serverListFilters configuration does not take effect
    • prevent override when NoRefreshSchema is true
    Source code(tar.gz)
    Source code(zip)
  • v2.4.0(Jan 4, 2022)

    Feature:

    • 支持TLS1.3

    Improvement:

    • 重构quota管理
    • 更改了metrics的前缀以区分其他业务模块的metrics name

    Bug fix:

    • 部分动态配置不生效
    Source code(tar.gz)
    Source code(zip)
  • v2.3.0(Aug 23, 2021)

    feature:

    • Consumer TLS config supports through compensation (#990)

    improvment:

    • 注册实例时候默认不注册schema到service-center #999
    • 支持log是否进行绕接和是否压缩的配置项 (#1001)

    Fix:

    • change jwt dep
    Source code(tar.gz)
    Source code(zip)
  • v2.2.0(Jun 2, 2021)

    Feature:

    • 提供Cipher 管理API(#966)
    • 提供新的配额管理API #969

    Improvement:

    • use foundation API to load tls cert (#963)
    • server插件开发不再依赖archaius (#978)
    • schema目录扫描不到文件不再报错,而是降级 (#978)

    Bug fix:

    • 限流不生效问题 (#965)
    • 可以正确处理字符串类型的限流数字定义 #962
    Source code(tar.gz)
    Source code(zip)
  • v2.1.1(Feb 26, 2021)

    • 为Client增加关闭空闲连接,可以及时回收资源;删除多余代码 (#940) …
    • Fix/typo/registry config (#946)
    • decouple sc client to https://github.com/go-chassis/sc-client (#948)
    • 逐步解耦传输层对具体协议的依赖 (#950)
    Source code(tar.gz)
    Source code(zip)
  • v2.1.0(Dec 3, 2020)

    Features

    • 可以使用kubernetes原生容器网络,或者在任意服务网格之上进行调用

    inprovement:

    • 优化了文档
    • fix function typo
    • remove service center depenency
    • better code comments

    Bug Fix:

    • https://github.com/go-chassis/go-chassis/pull/933
    Source code(tar.gz)
    Source code(zip)
  • v2.0.4(Nov 4, 2020)

    improvement:

    • mutual TLS认证过程支持在consumer端配置provider的服务名,以进行SN校验
    • 新增db配置描述,以统一开发的微服务对于db类中间件的配置都符合统一的标准
    • 升级archaius,解决UT的死锁问题
    • 增加了2.0.2升级到2.0.3的升级文档,指导用户升级
    Source code(tar.gz)
    Source code(zip)
  • v2.0.3(Sep 30, 2020)

    • enhance marker match policy (#904)
    • revert cse prefix for rate limiting v1, circuit breaker, load balancer
    • use lumberjack v2 to replace rotate tool (#901)
    • 更换了日志工具和日志配置
    Source code(tar.gz)
    Source code(zip)
  • v2.0.2(Sep 2, 2020)

  • v2.0.1(Aug 28, 2020)

    为了保证高质量的软件杜绝以f结尾的调用方式,同时进行了日志重构 https://github.com/go-chassis/go-chassis/issues/889

    Source code(tar.gz)
    Source code(zip)
  • v2.0.0(Aug 26, 2020)

    全新的功能:

    • 流量标记
    • 路由管理能力增强,可以基于流量标记进行引流
    • 中间件 包含限流,jwt认证,监控等
    • 自动感知https服务
    • 支持servicecomb kie作为分布式配置管理服务
    • 支持ctrip apllo作为分布式配置管理服务
    • 支持代码描述response header生成swagger文档
    • 配额管理扩展
    • 优雅停机功能可定制

    升级说明 https://go-chassis.readthedocs.io/en/latest/getstarted/upgrade.html

    Source code(tar.gz)
    Source code(zip)
  • v2.0.0-alpha.6(Aug 18, 2020)

    bug fix:

    • monitoring should call original call back func (#882)

    feature:

    • traffic marker
    • rate limiting v2 support traffic marker
    • route management support traffic marker

    improvement:

    • jwt middleware should install in init() function (#878)
    • if jwt is not init, skip auth
    Source code(tar.gz)
    Source code(zip)
  • v2.0.0-alpha.5(Jul 28, 2020)

    • fix handle chain copy (#877)
    • 统一服务中心的模型定义
    • get client ip,if not ip:port format, return raw,do not print log (#876)
    • 对于不合法token要检查是否为空指针 (#872)
    Source code(tar.gz)
    Source code(zip)
  • v2.0.0-alpha.3(Jul 1, 2020)

    • add jwt support (#844)
    • 可定制的优雅停机函数 (#846) …
    • 不兼容变更 (#870) …
    • feature: auth module to make auth standardized (#860)
    Source code(tar.gz)
    Source code(zip)
  • v2.0.0-alpha.2(May 5, 2020)

    feature:

    • monitoting middleware
    • quota management system extend (#823)
    • 通过配置match规则,对每一个请求打标记 (#818) …
    • select microservice config from archaius (#831) …
    • 自定义路由匹配算子 (#830) …

    incompatible :

    • delete deprecated struct (#839)
    • rate limiter middleware

    bug fix:

    • 让context在整个handler处理链之中完整的传递。 (#820) …
    Source code(tar.gz)
    Source code(zip)
  • v1.8.3(Apr 7, 2020)

  • v2.0.0-alpha.1(Mar 17, 2020)

    Features:

    • middlewares
    • go chassis runtime profiling
    • support huawei cloud ServiceStage environments
    • 客户端根据endpoint的sslEnabled=true自动开启tls (#796)
    • support servicecomb kie as configuration service (#798)
    • support describing response headers (#804)
    • Add header limit and server timeout (#807)

    Improvement:

    • remove unused API in service discovery interface
    • rename some APIs
    • adapt new archaius API
    • remove redundant apollo option (#774)
    • 保证restful的handler最后执行,可以让之前的handler都拿到业务的执行结,这是一次框架行为机制不兼容的提交 (#777) (#778)
    • decouple circuit breaker (#791)
    • 移除契约发现interface #803

    Bug fix:

    • #702
    • #767
    • #789 Load balance response time weight is not effective (#790) …
    Source code(tar.gz)
    Source code(zip)
  • v1.8.2(Feb 28, 2020)

    bug fix:

    • can not register schema at first registration
    • #702
    • fault-injector fix #767 (#768) …

    improvment:

    • add a handler, support record access log (#759) …
    • remove unused API (#769)
    • adapt archaius (#773)
    • remove redundant apollo option (#774)
    Source code(tar.gz)
    Source code(zip)
  • v1.8.1(Dec 26, 2019)

    improvment:

    • remove pkg/errors (#747)
    • remove unused env (#750)

    bug fix:

    • 错误的pxx统计,misused timing api (#756)
    • 错误的注册多个实例,因此进行了重写。rewrite heartbeat (#757)
    Source code(tar.gz)
    Source code(zip)
  • v1.8.0(Dec 10, 2019)

    Features:

    • 支持basic auth中间件
    • 现在go服务向servicecomb注册时,如果设置了tls相关配置项,会在ip:port后增加一个"sslEnabled=true"的标识 表示自己提供https服务(#734)
    • support open api tags (#745)

    improvement:

    • 限流功能应该无非阻塞的 (#739)
    • 删除go-chassis-config依赖,将代码移植到go-archaius

    Bug fix:

    • stop heartbeat service and unregistry self instances before shutting down server
    Source code(tar.gz)
    Source code(zip)
  • v1.7.6(Nov 18, 2019)

  • v1.7.5(Nov 12, 2019)

    improvement:

    • httpclient has more convenient API
    • add chinese readme
    • log trace for env injection
    • new extension repo go-chassis-cloud and related docs
    Source code(tar.gz)
    Source code(zip)
  • v1.7.4(Nov 7, 2019)

    improvements:

    • change copyright owner
    • add more docs about restful service development
    • upgrade github.com/emicklei/go-restful to 2.11 to support google custom method , an restful API style.
    • support swagger required defination for parameters in query and header

    imcompatible:

    • export swagger API doc path changed from /apidocs to /apidocs.json
    Source code(tar.gz)
    Source code(zip)
  • v1.7.3(Oct 28, 2019)

    improvement:

    • decouple servicecomb kie which is introduced by example (#714)
    • change license and notice to be more standardized (#716)
    • client verify target micro service's name in mutual tls (#718)
    Source code(tar.gz)
    Source code(zip)
  • v1.7.2(Oct 14, 2019)

    improvement:

    • add stack info when panic so we can locate it (#701)
    • upgrade archaius (#703)
    • export go runtime metrics in metrics pkg, not circuit breaker pkg

    bug fix:

    • 修复:业务处理函数返回403时,invocation.Response.Status仍然是200/OK (#709)
    • should always export swagger doc (#713)
    • should support no schema address (#711)
    Source code(tar.gz)
    Source code(zip)
  • v1.7.1(Sep 16, 2019)

    Annoucement:

    • ServiceComb mesher is able to run as a API gateway to expose service API, see https://mesher.readthedocs.io/en/latest/configurations/edge.html. not just exposing, mesher has all the ability that go chassis has, for example you can acheive blue grean release, or use circuit breaker to protect all the upstream services

    Feature:

    • go chassis support ServiceComb kie as config server, user can manage configuration in kie server , see https://github.com/go-chassis/go-chassis-config

    improvement:

    • reduce mem allocation, handler chain must be stateless, so do not implement a handler which has states in chain
    • refactor route rule configuration, compatible with old one. we recommand using new rule to manage traffic and use servicecomb kie to manage configuration

    bug fix:

    • return err is discovery service is diabled.
    Source code(tar.gz)
    Source code(zip)
Owner
focusing on go cloud native framework and service mesh solution to help developer to develop cloud service easily
null
GoLang utility packages to assist with the development of web micro-services.

GoTil Golang utility packages to assist with the development of web micro-services. Installation As a library. go get github.com/ccthomas/gotil Usage

Christopher Thomas 0 Nov 26, 2021
A code generator that turns plain old Go services into RPC-enabled (micro)services with robust HTTP APIs.

Frodo is a code generator and runtime library that helps you write RPC-enabled (micro) services and APIs.

Monadic 22 Dec 16, 2022
A microservice gateway developed based on golang.With a variety of plug-ins which can be expanded by itself, plug and play. what's more,it can quickly help enterprises manage API services and improve the stability and security of API services.

Goku API gateway is a microservice gateway developed based on golang. It can achieve the purposes of high-performance HTTP API forwarding, multi tenant management, API access control, etc. it has a powerful custom plug-in system, which can be expanded by itself, and can quickly help enterprises manage API services and improve the stability and security of API services.

Eolink 378 Dec 29, 2022
Go Micro is a framework for distributed systems development

Go Micro Go Micro is a framework for distributed systems development. Overview Go Micro provides the core requirements for distributed systems develop

Asim Aslam 19.9k Jan 3, 2023
micro-draft-manager is a microservice that helps you to manage unstructured data in your application with sorting and full-text search

micro-draft-manager is a microservice that helps you to manage unstructured data in your application with sorting and full-text search. For example, y

Hamed Abdollahpour 1 Nov 24, 2021
Micro is a platform for cloud native development

Micro Overview Micro addresses the key requirements for building services in the cloud. It leverages the microservices architecture pattern and provid

Micro 11.5k Dec 29, 2022
Go Micro: a standard library for distributed systems development

Go Micro Go Micro is a standard library for distributed systems development. Ove

Pixelmatic 5 Oct 4, 2022
Automatic Service Mesh and RPC generation for Go micro services, it's a humble alternative to gRPC with Istio.

Mesh RPC MeshRPC provides automatic Service Mesh and RPC generation for Go micro services, it's a humble alternative to gRPC with Istio. In a nutshell

AstraNet Toolkit 69 Aug 22, 2022
An open network for Micro services.

Micro Network The micro network is an open network for Micro services. Note: The network is still in early development. This document serves as a star

Micro 17 Nov 1, 2022
Study Project for the application of micro services and requisition controls

Starting Endpoint GO with Retry Request Install GoLang for Linux Tutorial: LINK

Antenor Pires 3 Jul 4, 2022
Authentication-microservice - Microservice for user authentication built with golang and gRPC

Authentication-microservice - Microservice for user authentication built with golang and gRPC

Isaque Veras 6 May 30, 2022
Microservice - A sample architecture of a microservice in go

#microservice Folder structure required. service certs config config.yaml loggin

null 0 Feb 3, 2022
Microservice - Microservice golang & nodejs

Microservice Gabungan service dari bahasa pemograman go, nodejs Demo API ms-auth

Didin Tri Anggoro 2 May 21, 2022
Customer-microservice - Microservice of customer built with golang and gRPC

?? Building microservices to manage customer data using Go and gRPC Command to g

Isaque Veras Labs 3 Sep 8, 2022
Erda is an open-source platform created by Terminus to ensure the development of microservice applications.

Erda is an open-source platform created by Terminus to ensure the development of microservice applications.

Erda 2.5k Jan 5, 2023
An example microservice demo using kubernetes concepts like deployment, services, persistent volume and claims, secrets and helm chart

Docker vs Kubernetes Docker Kubernetes container tech, isolated env for apps infra management, multiple containers automated builds and deploy apps -

abhijit wakchaure 0 Dec 13, 2021
Go-rifa-microservice - Clean Architecture template for Golang services

Test CI Go Clean template Clean Architecture template for Golang services Overvi

Evandro Martinelli 1 Sep 22, 2022
Micro-service framework in Go

Kite Micro-Service Framework Kite is a framework for developing micro-services in Go. Kite is both the name of the framework and the micro-service tha

Koding, Inc. 3.2k Jan 9, 2023
NewSQL distributed storage database based on micro service framework

QLite 是基于微服务的 NewSQL 型数据库系统,与传统的一体化数据库不同,该系统将本该内置的多种数据结构(STL)拆分成多个服务模块,每个模块都是独立的一个节点,每个节点都与其主网关进行连接,从而形成分布式存储结构。

null 36 Jun 19, 2022