feat: refactor.

This commit is contained in:
tx7do
2024-05-06 08:02:26 +08:00
parent cfb5aefaf9
commit 8e16b4309c
52 changed files with 2270 additions and 196 deletions

28
api/protos/buf.lock Normal file
View File

@@ -0,0 +1,28 @@
# Generated by buf. DO NOT EDIT.
version: v1
deps:
- remote: buf.build
owner: envoyproxy
repository: protoc-gen-validate
commit: eac44469a7af47e7839a7f1f3d7ac004
digest: shake256:0feabcde01b6b11e3c75a5e3f807968d5995626546f39c37e5d4205892b3a59cced0ed83b35a2eb9e6dddd3309660ad46b737c9dcd224b425de0a6654ce04417
- remote: buf.build
owner: gnostic
repository: gnostic
commit: 087bc8072ce44e339f213209e4d57bf0
digest: shake256:4689c26f0460fea84c4c277c1b9c7e7d657388c5b4116d1065f907a92100ffbea87de05bbd138a0166411361e1f6ce063b4c0c6002358d39710f3c4a8de788d5
- remote: buf.build
owner: gogo
repository: protobuf
commit: 5461a3dfa9d941da82028ab185dc2a0e
digest: shake256:37c7c75224982038cb1abf45b481ef06716c1f806ffaa162018d0df092bd11a2a9b62c2d0dc0a2ae43beff86b6014fc0eb8c594ffd84d52ade4b08fca901eadc
- remote: buf.build
owner: googleapis
repository: googleapis
commit: 28151c0d0a1641bf938a7672c500e01d
digest: shake256:49215edf8ef57f7863004539deff8834cfb2195113f0b890dd1f67815d9353e28e668019165b9d872395871eeafcbab3ccfdb2b5f11734d3cca95be9e8d139de
- remote: buf.build
owner: kratos
repository: apis
commit: c2de25f14fa445a79a054214f31d17a8
digest: shake256:91c024935d46f7966667c29e4fc933435959f93c3f0e675e1227c99db09905d44f8ec275b770da7659df5a6b18f4710da157b6d8ad760a4a95f60365b231e637

19
api/protos/buf.yaml Normal file
View File

@@ -0,0 +1,19 @@
version: v1
build:
excludes: [third_party]
deps:
- 'buf.build/googleapis/googleapis'
- 'buf.build/envoyproxy/protoc-gen-validate'
- 'buf.build/kratos/apis'
- 'buf.build/gnostic/gnostic'
- 'buf.build/gogo/protobuf'
breaking:
use:
- FILE
lint:
use:
- DEFAULT

View File

@@ -0,0 +1,28 @@
syntax = "proto3";
package conf;
option go_package = "github.com/tx7do/kratos-bootstrap/api/gen/go/conf/v1;conf";
import "conf/v1/kratos_conf_tracer.proto";
import "conf/v1/kratos_conf_data.proto";
import "conf/v1/kratos_conf_server.proto";
import "conf/v1/kratos_conf_client.proto";
import "conf/v1/kratos_conf_logger.proto";
import "conf/v1/kratos_conf_registry.proto";
import "conf/v1/kratos_conf_oss.proto";
import "conf/v1/kratos_conf_config.proto";
import "conf/v1/kratos_conf_notify.proto";
// 引导信息
message Bootstrap {
Server server = 1;
Client client = 2;
Data data = 3;
Tracer trace = 4;
Logger logger = 5;
Registry registry = 6;
RemoteConfig config = 7;
OSS oss = 8;
Notification notify = 9;
}

View File

@@ -0,0 +1,26 @@
syntax = "proto3";
package conf;
option go_package = "github.com/tx7do/kratos-bootstrap/api/gen/go/conf/v1;conf";
import "google/protobuf/duration.proto";
import "conf/v1/kratos_conf_middleware.proto";
// 客户端
message Client {
// REST
message REST {
google.protobuf.Duration timeout = 1; // 超时时间
Middleware middleware = 2;
}
// gPRC
message GRPC {
google.protobuf.Duration timeout = 1; // 超时时间
Middleware middleware = 2;
}
REST rest = 1; // REST服务
GRPC grpc = 2; // gRPC服务
}

View File

@@ -0,0 +1,53 @@
syntax = "proto3";
package conf;
option go_package = "github.com/tx7do/kratos-bootstrap/api/gen/go/conf/v1;conf";
import "google/protobuf/duration.proto";
// 配置服务
message RemoteConfig {
message Nacos {
string address = 1; // 服务端地址
uint64 port = 2; // 服务端端口
string key = 3; //
}
message Etcd {
repeated string endpoints = 1;
google.protobuf.Duration timeout = 2;
string key = 3; //
}
message Consul {
string scheme = 1; // 网络样式
string address = 2; // 服务端地址
string key = 3; //
}
message Apollo {
string endpoint = 1;
string app_id = 2;
string cluster = 3;
string namespace = 4;
string secret = 5;
}
message Kubernetes {
string namespace = 1;
}
message Polaris {
}
string type = 1;
Etcd etcd = 2;
Consul consul = 3;
Nacos nacos = 4;
Apollo apollo = 6;
Kubernetes kubernetes = 7;
Polaris polaris = 8;
}

View File

@@ -0,0 +1,124 @@
syntax = "proto3";
package conf;
option go_package = "github.com/tx7do/kratos-bootstrap/api/gen/go/conf/v1;conf";
import "google/protobuf/duration.proto";
// 数据
message Data {
// 数据库
message Database {
string driver = 1; // 驱动名mysql、postgresql、mongodb、sqlite……
string source = 2; // 数据源DSN字符串
bool migrate = 3; // 数据迁移开关
bool debug = 4; // 调试开关
int32 max_idle_connections = 5; // 连接池最大空闲连接数
int32 max_open_connections = 6; // 连接池最大打开连接数
google.protobuf.Duration connection_max_lifetime = 7; // 连接可重用的最大时间长度
}
// redis
message Redis {
string network = 1; // 网络
string addr = 2; // 服务端地址
string password = 3; // 密码
int32 db = 4; // 数据库索引
google.protobuf.Duration dial_timeout = 5; // 连接超时时间
google.protobuf.Duration read_timeout = 6; // 读取超时时间
google.protobuf.Duration write_timeout = 7; // 写入超时时间
bool enable_tracing = 8; // 打开链路追踪
bool enable_metrics = 9; // 打开性能度量
}
// MongoDB
message MongoDB {
string address = 1;
string username = 2;
string password = 3;
}
// ClickHouse
message ClickHouse {
string address = 1;
string database = 2;
string username = 3;
string password = 4;
bool debug = 5;
string compression_method = 6;
google.protobuf.Duration dial_timeout = 7;
int32 max_execution_time = 8;
int32 max_open_conns = 9;
int32 max_idle_conns = 10;
google.protobuf.Duration conn_max_life_time = 11;
int32 block_buffer_size = 12;
int32 max_compression_buffer = 13;
string conn_open_strategy = 14;
int32 max_idle_connections = 15; // 连接池最大空闲连接数
int32 max_open_connections = 16; // 连接池最大打开连接数
google.protobuf.Duration connection_max_lifetime = 17; // 连接可重用的最大时间长度
string protocol = 18;
}
// InfluxDB
message InfluxDB {
string address = 1;
string token = 2;
string organization = 3;
string bucket = 4;
}
// Kafka
message Kafka {
repeated string addrs = 1; // 对端网络地址
string codec = 2; // 编解码器
bool async = 3; // 异步发送
bool allow_auto_topic_creation = 4; // 允许发送的时候自动创建主题
int32 batch_size = 5; // 批量发送量
google.protobuf.Duration batch_timeout = 6; // 批量发送超时时间
google.protobuf.Duration read_timeout = 7; // 读取超时时间
google.protobuf.Duration write_timeout = 8; // 发送超时时间
int64 batch_bytes = 9;// 批量发送字节数
}
message Doris {
string address = 1;
}
message ElasticSearch {
repeated string addresses = 1;
string username = 2;
string password = 3;
bool enable_sniffer = 4;
bool enable_gzip = 5;
google.protobuf.Duration health_check_interval = 6;
}
message Cassandra {
string address = 1;
string username = 2;
string password = 3;
string keyspace = 5;
google.protobuf.Duration connect_timeout = 6;
google.protobuf.Duration timeout = 7;
uint32 consistency = 8;
bool disable_initial_host_lookup = 9;
bool ignore_peer_addr = 10;
}
Database database = 1; // 数据库DSN
Redis redis = 10; // Redis
MongoDB mongodb = 11; // MongoDB数据库
ElasticSearch elastic_search = 12; // ElasticSearch数据库
Cassandra cassandra = 13; // Cassandra数据库
ClickHouse clickhouse = 20; // ClickHouse数据库
InfluxDB influxdb = 21; // InfluxDB数据库
Doris doris = 22; // Doris数据库
Kafka kafka = 30; // Kafka服务
}

View File

@@ -0,0 +1,55 @@
syntax = "proto3";
package conf;
option go_package = "github.com/tx7do/kratos-bootstrap/api/gen/go/conf/v1;conf";
// 日志
message Logger {
// Zap
message Zap {
string filename = 1; //
string level = 2; //
int32 max_size = 3; //
int32 max_age = 4; //
int32 max_backups = 5; //
}
// logrus
message Logrus {
string level = 1; // 日志等级
string formatter = 2; // 输出格式text, json.
string timestamp_format = 3; // 定义时间戳格式,例如:"2006-01-02 15:04:05"
bool disable_colors = 4; // 不需要彩色日志
bool disable_timestamp = 5; // 不需要时间戳
}
// Fluent
message Fluent {
string endpoint = 1; // 公网接入地址
}
// 阿里云
message Aliyun {
string endpoint = 1; // 公网接入地址
string project = 2; //
string access_key = 3; // 访问密钥ID
string access_secret = 4; // 访问密钥
}
// 腾讯
message Tencent {
string endpoint = 1; // 公网接入地址
string topic_id = 2; //
string access_key = 3; // 访问密钥ID
string access_secret = 4; // 访问密钥
}
string type = 1;
Zap zap = 2;
Logrus logrus = 3;
Fluent fluent = 4;
Aliyun aliyun = 5;
Tencent tencent = 6;
}

View File

@@ -0,0 +1,38 @@
syntax = "proto3";
package conf;
option go_package = "github.com/tx7do/kratos-bootstrap/api/gen/go/conf/v1;conf";
import "google/protobuf/duration.proto";
message Middleware {
// JWT校验
message Auth {
string method = 1; // JWT签名的算法支持算法HS256
string key = 2; // JWT 秘钥
}
// 限流器
message RateLimiter {
string name = 1; // 限流器名字支持bbr。
}
// 性能指标
message Metrics {
bool histogram = 1; // 直方图
bool counter = 2; // 计数器
bool gauge = 3; // 仪表盘
bool summary = 4; // 摘要
}
bool enable_logging = 1; // 日志开关
bool enable_recovery = 2; // 异常恢复
bool enable_tracing = 3; // 链路追踪开关
bool enable_validate = 4; // 参数校验开关
bool enable_circuit_breaker = 5; // 熔断器
RateLimiter limiter = 6;
Metrics metrics = 7;
Auth auth = 8;
}

View File

@@ -0,0 +1,18 @@
syntax = "proto3";
package conf;
option go_package = "github.com/tx7do/kratos-bootstrap/api/gen/go/conf/v1;conf";
// 通知消息
message Notification {
// 短信
message SMS {
string endpoint = 1; // 公网接入地址
string region_id = 2; // 地域ID
string access_key_id = 3; // 访问密钥ID
string access_key_secret = 4; // 访问密钥
}
SMS sms = 1;
}

View File

@@ -0,0 +1,20 @@
syntax = "proto3";
package conf;
option go_package = "github.com/tx7do/kratos-bootstrap/api/gen/go/conf/v1;conf";
message OSS {
// MinIO
message MinIO {
string endpoint = 1; // 对端端口
string access_key = 2; // 访问密钥
string secret_key = 3; // 密钥
string token = 4; // 令牌
bool use_ssl = 5; // 使用SSL
string upload_host = 6; // 上传链接的主机名
string download_host = 7; // 下载链接的主机名
}
MinIO minio = 1;
}

View File

@@ -0,0 +1,82 @@
syntax = "proto3";
package conf;
option go_package = "github.com/tx7do/kratos-bootstrap/api/gen/go/conf/v1;conf";
import "google/protobuf/duration.proto";
// 注册发现中心
message Registry {
// Consul
message Consul {
string scheme = 1; // 网络样式
string address = 2; // 服务端地址
bool health_check = 3; // 健康检查
}
// Etcd
message Etcd {
repeated string endpoints = 1;
}
// ZooKeeper
message ZooKeeper {
repeated string endpoints = 1;
google.protobuf.Duration timeout = 2;
}
// Nacos
message Nacos {
string address = 1; // 服务端地址
uint64 port = 2; // 服务端端口
string namespace_id = 3; //
string log_level = 4; // 日志等级
string cache_dir = 5; // 缓存目录
string log_dir = 6; // 日志目录
int32 update_thread_num = 7; // 更新服务的线程数
google.protobuf.Duration timeout = 8; // http请求超时时间单位: 毫秒
google.protobuf.Duration beat_interval = 9; // 心跳间隔时间,单位: 毫秒
bool not_load_cache_at_start = 10; // 在启动时不读取本地缓存数据true: 不读取false: 读取
bool update_cache_when_empty = 11; // 当服务列表为空时是否更新本地缓存true: 更新,false: 不更新
}
// Kubernetes
message Kubernetes {
}
// Eureka
message Eureka {
repeated string endpoints = 1;
google.protobuf.Duration heartbeat_interval = 2;
google.protobuf.Duration refresh_interval = 3;
string path = 4;
}
// Polaris
message Polaris {
string address = 1; // 服务端地址
int32 port = 2; // 服务端端口
int32 instance_count = 3;
string namespace = 4;
string service = 5;
string token = 6;
}
// Servicecomb
message Servicecomb {
repeated string endpoints = 1;
}
string type = 1;
Consul consul = 2; // Consul
Etcd etcd = 3; // Etcd
ZooKeeper zookeeper = 4; // ZooKeeper
Nacos nacos = 5; // Nacos
Kubernetes kubernetes = 6; // Kubernetes
Eureka eureka = 7; // Eureka
Polaris polaris = 8; // Polaris
Servicecomb servicecomb = 9; // Servicecomb
}

View File

@@ -0,0 +1,203 @@
syntax = "proto3";
package conf;
option go_package = "github.com/tx7do/kratos-bootstrap/api/gen/go/conf/v1;conf";
import "google/protobuf/duration.proto";
import "conf/v1/kratos_conf_middleware.proto";
// 服务器
message Server {
// REST
message REST {
message CORS {
repeated string headers = 1; //
repeated string methods = 2; //
repeated string origins = 3; //
}
string network = 1; // 网络
string addr = 2; // 服务监听地址
google.protobuf.Duration timeout = 3; // 超时时间
CORS cors = 4; // 服务监听地址
Middleware middleware = 5; // 中间件
bool enable_swagger = 6; // 启用SwaggerUI
bool enable_pprof = 7; // 启用pprof
}
// gPRC
message GRPC {
string network = 1; // 网络
string addr = 2; // 服务监听地址
google.protobuf.Duration timeout = 3; // 超时时间
Middleware middleware = 4;
}
// Websocket
message Websocket {
string network = 1; // 网络样式http、https
string addr = 2; // 服务监听地址
string path = 3; // 路径
string codec = 4; // 编解码器: json,xml,yaml...
google.protobuf.Duration timeout = 5; // 超时时间
}
// MQTT
message Mqtt {
string addr = 1; // 对端网络地址
}
// Kafka
message Kafka {
repeated string addrs = 1; // 对端网络地址
}
// RabbitMQ
message RabbitMQ {
repeated string addrs = 1; // 对端网络地址
}
message ActiveMQ {
string endpoint = 1; // 对端网络地址
string codec = 2; // 编解码器: json,xml,yaml...
}
message NATS {
string endpoint = 1; // 对端网络地址
string codec = 2; // 编解码器: json,xml,yaml...
}
message NSQ {
string endpoint = 1; // 对端网络地址
string codec = 2; // 编解码器: json,xml,yaml...
}
message Pulsar {
string endpoint = 1; // 对端网络地址
string codec = 2; // 编解码器: json,xml,yaml...
}
message Redis {
string endpoint = 1; // 对端网络地址
string codec = 2; // 编解码器: json,xml,yaml...
}
message RocketMQ {
string version = 1; // 驱动版本aliyun、v2、v5
string codec = 2; // 编解码器: json,xml,yaml...
bool enable_trace = 3;
repeated string name_servers = 4;
string name_server_domain = 5;
string access_key = 6;
string secret_key = 7;
string security_token = 8;
string namespace = 9;
string instance_name = 10;
string group_name = 11;
}
// Asynq
message Asynq {
string endpoint = 1; // 对端网络地址
string password = 2; // redis登录密码
int32 db = 3; // 数据库索引
string location = 4; // 时区
}
// Machinery
message Machinery {
repeated string brokers = 1; // broker的地址可以根据实际使用的存储介质分别指定Redis、AMQP或AWS SQS
repeated string backends = 2; // backend配置用来指定存放结果的介质的配置。可以根据需求分别指定为Redis、memcached或mongodb等
}
// SSE
message SSE {
string network = 1; // 网络
string addr = 2; // 服务监听地址
string path = 3; // 路径
string codec = 4; // 编解码器
google.protobuf.Duration timeout = 5; // 超时时间
google.protobuf.Duration event_ttl = 6; // 超时时间
bool auto_stream = 7; //
bool auto_reply = 8; //
bool split_data = 9; //
bool encode_base64 = 10; // 进行BASE64编码
}
// SocketIO
message SocketIO {
string network = 1; // 网络
string addr = 2; // 服务监听地址
string path = 3; // 路径
string codec = 4; // 编解码器
}
// SignalR
message SignalR {
string network = 1; // 网络
string addr = 2; // 服务监听地址
string codec = 3; // 编解码器
google.protobuf.Duration keep_alive_interval = 4; // 超时时间
google.protobuf.Duration chan_receive_timeout = 5; // 超时时间
bool debug = 6; // 调试开关
uint32 stream_buffer_capacity = 7; //
}
// GraphQL
message GraphQL {
string network = 1; // 网络
string addr = 2; // 服务监听地址
string path = 3; // 路径
string codec = 4; // 编解码器
google.protobuf.Duration timeout = 5; // 超时时间
bool strict_slash = 6;
}
// Thrift
message Thrift {
string network = 1; // 网络
string addr = 2; // 服务监听地址
string protocol = 3;
bool buffered = 4;
bool framed = 5;
bool buffer_size = 6;
}
// RPC
REST rest = 1; // REST服务
GRPC grpc = 2; // gRPC服务
GraphQL graphql = 3; // GraphQL服务
Thrift thrift = 4; // Thrift服务
// Message Queue
Mqtt mqtt = 10; // MQTT服务
Kafka kafka = 11; // Kafka服务
RabbitMQ rabbitmq = 12; // RabbitMQ服务
ActiveMQ activemq = 13; // ActiveMQ
NATS nats = 14; // NATS
NSQ nsq = 15; // NATS
Pulsar pulsar = 16; // Pulsar
Redis redis = 17; // Redis
RocketMQ rocketmq = 18; // RocketMQ
// RealTime
Websocket websocket = 20; // Websocket服务
SSE sse = 21; // SSE服务
SocketIO socketio = 22; // SocketIO服务
SignalR signalr = 23; // SignalR服务
// Task Queue
Asynq asynq = 30; // Asynq服务
Machinery machinery = 31; // Machinery服务
}

View File

@@ -0,0 +1,14 @@
syntax = "proto3";
package conf;
option go_package = "github.com/tx7do/kratos-bootstrap/api/gen/go/conf/v1;conf";
// 链路追踪
message Tracer {
string batcher = 1; // jaeger或者zipkin
string endpoint = 2; // 端口
double sampler = 3; // 采样率默认1.0
string env = 4; // 运行环境dev、debug、product
bool insecure = 5;
}

View File

@@ -0,0 +1,81 @@
syntax = "proto3";
package pagination;
option go_package = "github.com/tx7do/kratos-bootstrap/gen/api/go/pagination/v1;pagination";
import "google/protobuf/any.proto";
import "google/protobuf/field_mask.proto";
import "gnostic/openapi/v3/annotations.proto";
// 分页通用请求
message PagingRequest {
// 当前页码
optional int32 page = 1 [
json_name = "page",
(gnostic.openapi.v3.property) = {
description: "当前页码",
default: {number: 1}
}
];
// 每页的行数
optional int32 page_size = 2 [
json_name = "pageSize",
(gnostic.openapi.v3.property) = {
description: "每一页的行数",
default: {number: 10}
}
];
// 与过滤参数
optional string query = 3 [
json_name = "query",
(gnostic.openapi.v3.property) = {
description: "与过滤参数",
example: {yaml: "{\"key1\":\"val1\",\"key2\":\"val2\"}"}
}
];
// 或过滤参数
optional string or_query = 4 [
json_name = "or",
(gnostic.openapi.v3.property) = {
description: "或过滤参数",
example: {yaml: "{\"key1\":\"val1\",\"key2\":\"val2\"}"}
}
];
// 排序条件
repeated string order_by = 5 [
json_name = "orderBy",
(gnostic.openapi.v3.property) = {
description: "排序条件,字段名前加'-'为降序,否则为升序。"
example: {yaml: "{\"val1\", \"-val2\"}"}
}
];
// 是否不分页
optional bool no_paging = 6 [
json_name = "nopaging",
(gnostic.openapi.v3.property) = {description: "是否不分页"}
];
// 字段掩码
google.protobuf.FieldMask field_mask = 7 [
json_name = "fieldMask",
(gnostic.openapi.v3.property) = {
description: "字段掩码,如果为空则选中所有字段。",
example: {yaml : "id,realName,userName"}
}
];
}
// 分页通用结果
message PagingResponse {
// 总数
int32 total = 1;
// 分页数据
repeated google.protobuf.Any items = 2;
}