kratos

package module
v2.0.0-alpha5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 3, 2021 License: MIT Imports: 10 Imported by: 546

README

kratos

Language Build Status GoDoc Go Report Card Discord

Translations: English | 简体中文

Kratos

Kratos is a microservice-oriented governance framework implements by golang, which offers convenient capabilities to help you quickly build a bulletproof application from scratch.

The name is inspired by the game God of War which is based on Greek myths, tells the Kratos from mortals to become a God of War and launches the adventure of killing god.

Goals

Kratos boosts your productivity. With the integration of excellent resources and further support, you can get rid of most issues you might encounter in the field of distributed systems and software engineering, so that you can focus on business delivery. For each developer, Kratos is an ideal one for learning as well. You can navigate the diverse knowledge of microservice and accumulate engineering experience.

Principles
  • Simple: Appropriate design, plain and simple code.
  • General: Cover the various utilities for business development.
  • Reliable: Higher testability and greater test coverage of base libs validated in the production environment.
  • Robust: Base libs are designed reasonably to reduce misuse.
  • High-performance: We give you optimal performance without using the hack-way approach like adding the unsafe package and guarantee compatibility and stability at the same time.
  • Expandable: Appropriate API design, you can expand utilities such as base libs to meet your further requirements.
  • Fault-tolerance: Designed against failure, enhance the understanding and exercising of SRE within Kratos to achieve more robustness.
  • Toolchain: Includes an extensive toolchain, such as cache code generation, lint tools, etc.

Features

  • APIs: HTTP/gRPC based transport and Protobuf defined communication protocol.
  • Errors: We use ProtoBuf Enum to define error code and generate error handle code.
  • Metadata: Normalize the service metadata transmission by excellent middleware.
  • Config: Multi-data source Support, well arranged, dynamic configuration via Atomic package.
  • Logger: Standard log API, easily integrate with third-party log lib, Fluentd logs collection.
  • Metrics: Prometheus integration by default. Furthermore, with the unified Metrics interface, you can implement your metrics system more flexible
  • Tracing: Complete micro-service link tracing followed by OpenTracing specification.
  • Encoding: Support Accept and Content-Type for auto content encoding.
  • Transport: Common HTTP/ GRPC transport layer offers you powerful Middleware support.
  • Registry: One pluggable API for the different registry.

Getting Started

Required
Installing
go get github.com/go-kratos/kratos/cmd/kratos/v2@latest
Create a service
# create project template
kratos new helloworld

cd helloworld
# generate Proto template
kratos proto add api/helloworld/helloworld.proto
# generate Proto source code
kratos proto client api/helloworld/helloworld.proto
# generate server template
kratos proto server api/helloworld/helloworld.proto -t internal/service

# Generate all proto source code, wire, etc.
go generate ./...
# compile
go build -o ./bin/ ./...
# run
./bin/helloworld -conf ./configs
Kratos Boot
import "github.com/go-kratos/kratos/v2"
import "github.com/go-kratos/kratos/v2/transport/grpc"
import "github.com/go-kratos/kratos/v2/transport/http"

httpSrv := http.NewServer(http.Address(":8000"))
grpcSrv := grpc.NewServer(grpc.Address(":9000"))

app := kratos.New(
    kratos.Name("kratos"),
    kratos.Version("latest"),
    kratos.Server(httpSrv, grpcSrv),
)
app.Run()

Community

License

Kratos is MIT licensed. See the LICENSE file for details.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type App

type App struct {
	// contains filtered or unexported fields
}

App is an application components lifecycle manager

func New

func New(opts ...Option) *App

New create an application lifecycle manager.

func (*App) Logger

func (a *App) Logger() log.Logger

Logger returns logger.

func (*App) Registrar

func (a *App) Registrar() registry.Registrar

Registrar returns registry.

func (*App) Run

func (a *App) Run() error

Run executes all OnStart hooks registered with the application's Lifecycle.

func (*App) Server

func (a *App) Server() []transport.Server

Server returns transport servers.

func (*App) Stop

func (a *App) Stop() error

Stop gracefully stops the application.

type Option

type Option func(o *options)

Option is an application option.

func Context

func Context(ctx context.Context) Option

Context with service context.

func Endpoint

func Endpoint(endpoints ...string) Option

Endpoint with service endpoint.

func ID

func ID(id string) Option

ID with service id.

func Logger

func Logger(logger log.Logger) Option

Logger with service logger.

func Metadata

func Metadata(md map[string]string) Option

Metadata with service metadata.

func Name

func Name(name string) Option

Name with service name.

func Registrar

func Registrar(r registry.Registrar) Option

Registrar with service registry.

func Server

func Server(srv ...transport.Server) Option

Server with transport servers.

func Signal

func Signal(sigs ...os.Signal) Option

Signal with exit signals.

func Version

func Version(version string) Option

Version with service version.

Directories

Path Synopsis
api
proto
Package proto defines the protobuf codec.
Package proto defines the protobuf codec.
internal

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL