core

package module
v0.1.1 Latest Latest
Warning

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

Go to latest
Published: Jul 30, 2026 License: MIT Imports: 25 Imported by: 0

README

core

core 是不包含 Proto、业务实现和数据库访问的 Kratos 基础运行时。它负责配置加载、应用生命周期、 HTTP/gRPC/MCP/SSE、框架拦截器、OpenAPI/Swagger、定时任务、队列、启动脚本、健康检查、 静态资源和外部模块装配。数据库模型、权限策略、业务队列主题和实际迁移资源由接入项目维护。

接口协议、生成代码及其具体实现全部由接入模块维护,Core 只负责挂载模块提供的服务。

模块路径为 github.com/liujitcn/kratos-admin/backend/core。仓库内的 Backend 通过本地 replace 引用;发布独立版本时使用 backend/core/vX.Y.Z tag,使用方改为对应版本后不再需要 replace

core
├── app.go、module.go、options.go  # 宿主入口与模块装配
└── pkg                           # 可供接入项目引用的公共能力包(含 errorsx)

快速接入

1. 添加依赖

发布 backend/core/vX.Y.Z tag 后,接入项目使用对应模块版本:

go get github.com/liujitcn/kratos-admin/backend/core@v0.1.0

本地联调可先使用 replace,路径必须指向实际的 Core 目录:

require github.com/liujitcn/kratos-admin/backend/core v0.0.0

replace github.com/liujitcn/kratos-admin/backend/core v0.0.0 => ../kratos-admin/backend/core

本仓库 Backend 的 go.mod 使用 => ./core,并直接复用 Core 的模块契约、OpenAPI、 任务、队列、SSE 和事件能力。发布 Core 后删除 replace,将 require 替换为实际版本。

2. 实现并注册模块

接入项目自己维护 Proto、生成代码和服务实现。模块嵌入 core.ModuleAdapter, 只实现需要的传输层注册方法:

package order

import (
	"github.com/go-kratos/kratos/v3/transport/http"
	"github.com/liujitcn/kratos-admin/backend/core"
	orderv1 "github.com/example/order/api/gen/go/order/v1"
)

type Module struct {
	core.ModuleAdapter
	service orderv1.OrderServiceHTTPServer
}

func NewModule(service orderv1.OrderServiceHTTPServer) *Module {
	return &Module{service: service}
}

func (module *Module) RegisterHTTP(server *http.Server) {
	orderv1.RegisterOrderServiceHTTPServer(server, module.service)
}

不需要数据库、生成接口或具体业务的能力可直接通过 core.Option 注入。 完整宿主入口如下:

package main

import (
	"context"

	"github.com/go-kratos/kratos/v3"
	"github.com/liujitcn/kratos-admin/backend/core"
	bootstrapConfigv1 "github.com/liujitcn/kratos-kit/api/gen/go/config/v1"
	"github.com/liujitcn/kratos-kit/bootstrap"

	_ "github.com/liujitcn/kratos-kit/logger/zap"
)

func main() {
	module := newOrderModule()
	bootstrapContext := bootstrap.NewContext(
		context.Background(),
		&bootstrapConfigv1.AppInfo{
			Project: "order",
			AppId:   "server",
			Version: "dev",
		},
	)
	err := bootstrap.RunApp(bootstrapContext, func(ctx *bootstrap.Context) (*kratos.App, func(), error) {
		return core.NewApp(ctx, core.WithModules(module))
	})
	if err != nil {
		panic(err)
	}
}

newOrderModule 由接入项目的手工组合根或 Wire 提供。Core 不扫描模块,所有服务和扩展都必须在入口显式注册。

3. 准备配置并启动

Core 通过 kratos-kit/bootstrap 读取配置。最小 configs/server.yaml 示例:

server:
  http:
    addr: :7001
    middleware:
      enable_recovery: true
      enable_tracing: true
      enable_validate: true
      enable_metadata: true
  grpc:
    addr: 0.0.0.0:6001
    middleware:
      enable_recovery: true
      enable_tracing: true
      enable_validate: true
      enable_metadata: true
go run ./cmd/server --conf ./configs

需要认证、鉴权或业务日志时,通过 HTTPMiddlewareContributor / GRPCMiddlewareContributorcore.WithHTTPMiddlewares / core.WithGRPCMiddlewares 注入; Core 只负责框架拦截器和扩展中间件的统一装配。

基础能力

职责
pkg/errorsx 稳定的 Kratos 业务错误构造、兜底包装和数据库错误类型识别。
pkg/openapi 文档注册、HTTP 操作冲突检查、原始文档和 Swagger UI。
pkg/localgrpc 将已注册服务暴露为生成客户端可用的进程内 gRPC 连接。
pkg/task 任务注册、静态 Cron 调度、立即执行、panic 恢复和执行观察器。
pkg/queue 队列生命周期、消费者注册、JSON 发布与载荷解码。
pkg/sse SSE 流注册、解析和 JSON 事件发布。
pkg/script 启动脚本注册、依赖排序和执行,数据库迁移通过适配器接入。
pkg/startup 服务启动前的初始化钩子、失败回滚和退出清理。
pkg/health 存活检查和外部依赖就绪检查聚合。
pkg/static 静态目录和 SPA fallback 挂载。
pkg/event 类型安全的进程内发布订阅。

扩展能力

模块按需实现可选 Contributor,不需要为未使用的能力增加空方法:

Contributor 贡献内容
HTTPMiddlewareContributor / GRPCMiddlewareContributor 认证、鉴权等外部拦截器。
OpenAPIContributor 内嵌的 OpenAPI 文档。
TaskContributor 具名任务和可选 Cron 表达式。
QueueConsumerContributor 队列主题与消费者。
SSEContributor SSE 流定义。
ScriptContributor 数据库迁移适配器等启动脚本。
StartupContributor 服务启动前的初始化和退出清理钩子。
HealthContributor 数据库、缓存等 readiness 检查。
StaticContributor 静态资源或 SPA。
ServerContributor 其他 Kratos 后台 Server。

OpenAPI 文档启用后分别暴露为 /api/docs/openapi/{key},Swagger UI 位于 /api/docs/swagger/{key}/。业务模块负责生成协议和文档,并通过 go:embed 向 Core 宿主提供文档内容。

队列适配器通过 WithQueue 注入;动态任务可通过 WithTaskRegistry 与外部任务仓储共享注册表; SSE 订阅身份解析和业务发布器由外部模块持有注入的 SSE RegistrySSE Server 完成。 文档鉴权通过 WithOpenAPIAuthorizer 注入。组合根也可以使用 WithTasksWithQueueConsumersWithSSEStreamsWithScriptsWithStartupHooksWithHealthChecksWithStaticMountsWithServers 直接追加能力。

启动顺序固定为:收集并校验贡献 → 构造后台和传输服务 → 按依赖执行启动脚本 → 执行启动 钩子 → Kratos 启动全部 Server。退出时启动钩子按相反顺序清理。

验证

make lint
make fmt
make test
make vet

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewApp

func NewApp(ctx *bootstrap.Context, optionValues ...Option) (*kratos.App, func(), error)

NewApp 创建只包含传输层、拦截器和外部模块挂载能力的 Kratos 应用。

Types

type GRPCMiddlewareContributor

type GRPCMiddlewareContributor interface {
	GRPCMiddlewares() []kratosMiddleware.Middleware
}

GRPCMiddlewareContributor 表示可贡献 gRPC 服务端中间件的模块。

type HTTPMiddlewareContributor

type HTTPMiddlewareContributor interface {
	HTTPMiddlewares() []kratosMiddleware.Middleware
}

HTTPMiddlewareContributor 表示可贡献 HTTP 服务端中间件的模块。

type HealthContributor

type HealthContributor interface {
	// HealthChecks 返回模块提供的就绪检查。
	HealthChecks() []health.Check
}

HealthContributor 表示可贡献外部依赖就绪检查的模块。

type Module

type Module interface {
	RegisterGRPC(grpc.ServiceRegistrar)
	RegisterHTTP(*kratosHTTP.Server)
	RegisterMCP(*mcpserver.Server)
}

Module 表示可挂载到核心服务宿主的外部服务模块。

type ModuleAdapter

type ModuleAdapter struct{}

ModuleAdapter 为不需要全部传输协议的外部模块提供空注册实现。

func (ModuleAdapter) RegisterGRPC

func (ModuleAdapter) RegisterGRPC(grpc.ServiceRegistrar)

RegisterGRPC 保持 gRPC 注册为空。

func (ModuleAdapter) RegisterHTTP

func (ModuleAdapter) RegisterHTTP(*kratosHTTP.Server)

RegisterHTTP 保持 HTTP 注册为空。

func (ModuleAdapter) RegisterMCP

func (ModuleAdapter) RegisterMCP(*mcpserver.Server)

RegisterMCP 保持 MCP 注册为空。

type Modules

type Modules []Module

Modules 表示当前进程启用的外部服务模块集合。

func (Modules) GRPCMiddlewares

func (modules Modules) GRPCMiddlewares() []kratosMiddleware.Middleware

GRPCMiddlewares 汇总全部外部模块贡献的 gRPC 中间件。

func (Modules) HTTPMiddlewares

func (modules Modules) HTTPMiddlewares() []kratosMiddleware.Middleware

HTTPMiddlewares 汇总全部外部模块贡献的 HTTP 中间件。

func (Modules) HealthChecks

func (modules Modules) HealthChecks() []health.Check

HealthChecks 汇总全部外部模块贡献的就绪检查。

func (Modules) OpenAPIDocuments

func (modules Modules) OpenAPIDocuments() []openapi.Document

OpenAPIDocuments 汇总全部外部模块贡献的 OpenAPI 文档。

func (Modules) QueueConsumers

func (modules Modules) QueueConsumers() []coreQueue.Consumer

QueueConsumers 汇总全部外部模块贡献的队列消费者。

func (Modules) RegisterGRPC

func (modules Modules) RegisterGRPC(server grpc.ServiceRegistrar)

RegisterGRPC 将全部外部模块注册到 gRPC 服务。

func (Modules) RegisterHTTP

func (modules Modules) RegisterHTTP(server *kratosHTTP.Server)

RegisterHTTP 将全部外部模块注册到 HTTP 服务。

func (Modules) RegisterMCP

func (modules Modules) RegisterMCP(server *mcpserver.Server)

RegisterMCP 将全部外部模块注册到 MCP 服务。

func (Modules) SSEStreams

func (modules Modules) SSEStreams() []coreSSE.Stream

SSEStreams 汇总全部外部模块贡献的 SSE 流。

func (Modules) Scripts

func (modules Modules) Scripts() []script.Script

Scripts 汇总全部外部模块贡献的启动脚本。

func (Modules) Servers

func (modules Modules) Servers() []kratosTransport.Server

Servers 汇总全部外部模块贡献的后台服务。

func (Modules) StartupHooks

func (modules Modules) StartupHooks() []startup.Hook

StartupHooks 汇总全部外部模块贡献的服务启动和清理钩子。

func (Modules) StaticMounts

func (modules Modules) StaticMounts() []coreStatic.Mount

StaticMounts 汇总全部外部模块贡献的静态资源挂载。

func (Modules) Tasks

func (modules Modules) Tasks() []task.Task

Tasks 汇总全部外部模块贡献的任务定义。

type OpenAPIContributor

type OpenAPIContributor interface {
	// OpenAPIDocuments 返回模块拥有的独立 OpenAPI 文档。
	OpenAPIDocuments() []openapi.Document
}

OpenAPIContributor 表示可贡献具名 OpenAPI 文档的模块。

type Option

type Option func(*options)

Option 表示核心服务宿主的装配选项。

func WithGRPCMiddlewares

func WithGRPCMiddlewares(middlewares ...kratosMiddleware.Middleware) Option

WithGRPCMiddlewares 追加 gRPC 服务端中间件。

func WithHTTPMiddlewares

func WithHTTPMiddlewares(middlewares ...kratosMiddleware.Middleware) Option

WithHTTPMiddlewares 追加 HTTP 服务端中间件。

func WithHealthChecks

func WithHealthChecks(checks ...health.Check) Option

WithHealthChecks 追加由组合根直接提供的就绪检查。

func WithModules

func WithModules(modules ...Module) Option

WithModules 挂载外部服务模块。

func WithOpenAPIAuthorizer

func WithOpenAPIAuthorizer(authorizer func(*stdhttp.Request) bool) Option

WithOpenAPIAuthorizer 设置 OpenAPI 文档访问校验函数。

func WithOpenAPIDocuments

func WithOpenAPIDocuments(documents ...openapi.Document) Option

WithOpenAPIDocuments 追加由组合根直接提供的 OpenAPI 文档。

func WithOpenAPIPaths

func WithOpenAPIPaths(documentPath, swaggerPath string) Option

WithOpenAPIPaths 配置原始文档和 Swagger UI 的路由前缀。

func WithOpenAPIRegistry

func WithOpenAPIRegistry(registry *openapi.Registry) Option

WithOpenAPIRegistry 使用调用方创建的 OpenAPI 注册表。

func WithQueue

func WithQueue(queue kitQueue.Queue) Option

WithQueue 注入内存、Redis 或其他队列适配器。

func WithQueueConsumers

func WithQueueConsumers(consumers ...coreQueue.Consumer) Option

WithQueueConsumers 追加由组合根直接提供的队列消费者。

func WithSSERegistry

func WithSSERegistry(registry *coreSSE.Registry) Option

WithSSERegistry 使用调用方创建的 SSE 流注册表。

func WithSSEServer

func WithSSEServer(server *sseServer.Server) Option

WithSSEServer 注入需要挂载或独立启动的 SSE 服务。

func WithSSEStreams

func WithSSEStreams(streams ...coreSSE.Stream) Option

WithSSEStreams 追加由组合根直接提供的 SSE 流定义。

func WithScripts

func WithScripts(scripts ...script.Script) Option

WithScripts 追加由组合根直接提供的启动脚本。

func WithServers

func WithServers(servers ...kratosTransport.Server) Option

WithServers 追加定时任务、消费者等 Kratos 后台服务。

func WithStartupHooks

func WithStartupHooks(hooks ...startup.Hook) Option

WithStartupHooks 追加由组合根直接提供的服务启动和清理钩子。

func WithStaticMounts

func WithStaticMounts(mounts ...coreStatic.Mount) Option

WithStaticMounts 追加由组合根直接提供的静态资源挂载。

func WithTaskObserver

func WithTaskObserver(observer task.Observer) Option

WithTaskObserver 设置任务执行结果观察器。

func WithTaskRegistry

func WithTaskRegistry(registry *task.Registry) Option

WithTaskRegistry 使用调用方创建的任务注册表,便于动态任务适配器共享。

func WithTasks

func WithTasks(tasks ...task.Task) Option

WithTasks 追加由组合根直接提供的任务定义。

type QueueConsumerContributor

type QueueConsumerContributor interface {
	// QueueConsumers 返回模块提供的队列消费者。
	QueueConsumers() []coreQueue.Consumer
}

QueueConsumerContributor 表示可贡献队列消费者的模块。

type SSEContributor

type SSEContributor interface {
	// SSEStreams 返回模块提供的 SSE 流定义。
	SSEStreams() []coreSSE.Stream
}

SSEContributor 表示可贡献 SSE 流的模块。

type ScriptContributor

type ScriptContributor interface {
	// Scripts 返回模块提供的启动脚本。
	Scripts() []script.Script
}

ScriptContributor 表示可贡献启动脚本或数据库迁移适配器的模块。

type ServerContributor

type ServerContributor interface {
	// Servers 返回需要纳入 Kratos 生命周期的后台服务。
	Servers() []kratosTransport.Server
}

ServerContributor 表示可贡献定时任务、消费者等后台服务的模块。

type StartupContributor

type StartupContributor interface {
	// StartupHooks 返回模块提供的服务启动和清理钩子。
	StartupHooks() []startup.Hook
}

StartupContributor 表示可贡献服务启动和清理钩子的模块。

type StaticContributor

type StaticContributor interface {
	// StaticMounts 返回模块提供的静态资源挂载。
	StaticMounts() []coreStatic.Mount
}

StaticContributor 表示可贡献静态资源或单页应用挂载的模块。

type TaskContributor

type TaskContributor interface {
	// Tasks 返回模块提供的任务定义。
	Tasks() []task.Task
}

TaskContributor 表示可贡献具名任务的模块。

Directories

Path Synopsis
pkg
errorsx
Package errorsx 提供稳定的 Kratos 结构化错误构造能力。
Package errorsx 提供稳定的 Kratos 结构化错误构造能力。
event
Package event 提供类型安全的进程内发布订阅能力。
Package event 提供类型安全的进程内发布订阅能力。
health
Package health 提供存活检查和可扩展就绪检查。
Package health 提供存活检查和可扩展就绪检查。
localgrpc
Package localgrpc 提供与生成 gRPC 客户端兼容的进程内调用连接。
Package localgrpc 提供与生成 gRPC 客户端兼容的进程内调用连接。
openapi
Package openapi 管理当前进程启用的 OpenAPI 文档。
Package openapi 管理当前进程启用的 OpenAPI 文档。
queue
Package queue 提供队列生命周期、结构化消息发布和解码能力。
Package queue 提供队列生命周期、结构化消息发布和解码能力。
script
Package script 管理服务启动前执行的具名基础设施脚本。
Package script 管理服务启动前执行的具名基础设施脚本。
sse
Package sse 提供模块无关的 SSE 流注册与 JSON 发布能力。
Package sse 提供模块无关的 SSE 流注册与 JSON 发布能力。
startup
Package startup 管理服务启动前的初始化钩子及其清理工作。
Package startup 管理服务启动前的初始化钩子及其清理工作。
static
Package static 提供模块无关的静态资源与单页应用挂载能力。
Package static 提供模块无关的静态资源与单页应用挂载能力。
task
Package task 提供模块无关的任务注册、执行和 Cron 调度能力。
Package task 提供模块无关的任务注册、执行和 Cron 调度能力。

Jump to

Keyboard shortcuts

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