diff --git a/README.md b/README.md
index b517a4b..7bec650 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,224 @@
-# doutok
-抖音电商项目
-
-## 增加模块教程
-1. 在 app 包创建一个子模块包
-2. go mod init
-进入子模块包,执行 go mod init
-如 go mod init github.com/doutokk/doutok/app/auth
-3. 在 go.work 加入子模块包
-4. 进入项目根目录
-make gen svc=auth
+
+
+
🎬 DouTok Shop(抖音电商)
+
基于 Kitex 和 Hertz 框架构建的高性能、易扩展的云原生商城项目
+
+
+
+
+
+
+
+
+
+---
+
+## 🌟 项目简介
+
+DouTok Shop(抖音电商)是一个面向云原生时代的综合性电商平台,旨在提供高性能、易扩展的电商解决方案。项目基于字节跳动的 Kitex 作为 RPC 框架和 Hertz 作为 HTTP 框架,结合成熟的后端技术与现代 DevOps 工具链,构建用户、管理与运维多端统一的生态系统。
+
+**主要功能:**
+
+- **用户端:**
+ - 浏览商品、商品搜索与筛选
+ - 添加购物车、下单及订单管理
+ - 跳转支付宝支付等集成
+
+- **管理端:**
+ - 商品的新增、修改与删除
+ - 图片直传至阿里云 OSS,实现高效媒体管理
+
+- **运维端:**
+ - 自动化的 Pod 扩缩容与节点弹性扩容
+ - 统一日志管理、性能监控(Metrics)及链路追踪
+ - GitOps 工作流实现持续集成与持续部署
+
+---
+
+## 🔗 项目地址
+
+- **展示地址:** [https://shopnext.kl.suyiiyii.top/](https://shopnext.kl.suyiiyii.top/)
+- **CDN 地址:** [https://shopnext.suyiiyii.top/](https://shopnext.suyiiyii.top/)
+- **后端仓库:** [https://github.com/doutokk/doutok](https://github.com/doutokk/doutok)
+- **前端仓库:** [https://github.com/doutokk/doutok-frontend](https://github.com/doutokk/doutok-frontend)
+
+---
+
+## 👥 项目分工
+
+- **队长:** 杜家楷
+ *主要负责流水线部署、运维、前端开发、OSS 文件直传及实现商品管理、购物车、订单和支付模块。*
+
+- **队员:** 钟宝骏
+ *主要负责压测、搜索、缓存、测试、仓库管理以及用户、鉴权和网关模块的实现。*
+
+---
+
+## 🛠 技术栈
+
+### 后端
+- **语言:** Go
+- **RPC & HTTP 框架:** Kitex & Hertz
+- **鉴权:** JWT + Casbin(基于角色的权限控制)
+- **数据库:** MySQL(关系型数据存储)
+- **缓存与分布式锁:** Redis
+- **搜索引擎:** Elasticsearch(商品搜索性能提升约10倍)
+- **对象存储:** 阿里云 OSS
+
+### 前端
+- **框架:** React
+- **静态资源托管:** Nginx 配合 CDN 加速
+
+### 部署与运维
+- **容器化与编排:** Kubernetes
+- **日志与监控:** Prometheus、Grafana、Loki、Promtail
+- **链路追踪:** Jaeger
+- **CI/CD:** GitHub Actions、GitHub Packages、ArgoCD(GitOps 模式)
+
+---
+
+## 🏗 项目架构
+
+DouTok Shop 的架构设计注重高可用与弹性扩展,主要包括以下层级:
+
+1. **客户端与内容分发**
+ - 浏览器访问 → 静态资源通过 CDN 加速
+
+2. **接入层**
+ - Ingress(Traefik)统一入口,路由至网关或各微服务
+
+3. **业务服务层**
+ - **Gateway:** 统一处理用户请求与服务间聚合
+ - **微服务:** 拆分为用户、商品、订单、支付等独立模块,通过 RPC/HTTP 通信
+ - **Redis:** 提供高频数据缓存及分布式锁支持
+
+4. **数据与存储层**
+ - **MySQL:** 核心业务数据存储,确保数据一致性
+ - **对象存储:** 阿里云 OSS 存储图片、视频等非结构化数据
+
+5. **可观测性与监控**
+ - **日志:** Loki + Promtail 集中管理日志
+ - **监控:** Prometheus + Grafana 实时监控关键指标
+ - **链路追踪:** Jaeger 分布式调用链追踪
+
+6. **基础设施层**
+ - Kubernetes 集群管理,支持自动扩缩容与高可用部署
+
+---
+
+## 🚀 快速开始
+
+### 环境准备
+
+- **Go 版本:** ≥ 1.18
+- **MySQL 版本:** ≥ 8.0
+- **Redis 版本:** ≥ 6.0
+- **Kubernetes 集群环境**(可选,用于生产部署)
+- **阿里云 OSS 账户**(用于对象存储)
+
+### 本地部署步骤
+
+1. **克隆仓库**
+ ```bash
+ git clone https://github.com/doutokk/doutok.git
+ cd doutok
+ ```
+
+2. **安装依赖**
+ ```bash
+ go mod download
+ 或
+ go mod tidy
+ ```
+
+3. **数据库配置**
+ - 根据 `docs/database` 下的说明,创建并初始化 MySQL 数据库及数据表
+
+4. **编辑配置文件**
+ - 在各微服务的 `conf` 目录下,使用您的数据库、Redis 和 OSS 凭证更新 YAML 配置文件
+
+5. **使用 Docker 部署**
+ - 参考 `deploy/docker` 中各微服务的 `Dockerfile`
+ - 确保端口与配置文件中定义一致,设置环境变量 `GO_ENV=dev`(开发环境)或其它适配环境
+
+6. **启动服务**
+ - 使用 Docker Compose 或 Kubernetes 清单文件进行服务启动和部署
+
+---
+
+## 📚 API 文档
+
+API 文档位于项目文档目录中,方便您了解各微服务接口定义与调用方式:
+```bash
+cd docs/api
+```
+
+---
+
+## 🚢 部署与 GitOps 工作流
+
+DouTok Shop 完整采用 GitOps 工作流,通过 GitHub Actions 触发持续集成和镜像构建,再由 ArgoCD 实现 Kubernetes 集群的持续部署。主要步骤包括:
+
+1. **代码提交触发流水线**
+ - 自动化执行编译、单元测试、静态检查
+
+2. **镜像构建与推送**
+ - Dockerfile 构建镜像,推送至 GitHub Container Registry
+
+3. **配置声明更新**
+ - 使用 kustomize/helm 更新 Kubernetes 清单,提交至 Manifest 仓库
+
+4. **持续部署**
+ - ArgoCD 实时监控 Manifest 仓库变更,并同步至集群,实现滚动更新与零宕机部署
+
+---
+
+## 🤝 贡献指南
+
+欢迎各路开发者共同参与 DouTok Shop 项目的建设!
+
+1. **Fork 本仓库**
+2. **创建新分支**
+ ```bash
+ git checkout -b feature/YourFeature
+ ```
+3. **提交代码与更新文档**
+4. **提交 Pull Request**
+
+请确保您的代码通过所有测试,并附上相关文档说明。
+
+---
+
+## 📄 许可证
+
+本项目采用 [MIT 许可证](LICENSE)。
+
+---
+
+## 🙋♀ 作者 & 团队
+
+- **杜家楷**
+ 邮箱:suyiiyii@gmail.com
+ *(流水线部署、运维、前端、OSS 直传、商品管理、购物车、订单、支付模块)*
+
+- **钟宝骏**
+ 邮箱:3168078770@qq.com
+ *(压测、搜索、缓存、测试、仓库管理、用户鉴权、网关模块)*
+
+
+---
+
+## 🔍 项目总结与展望
+
+- **当前问题:** 部分业务场景仍需进一步优化,如高并发下的细粒度权限控制与缓存策略
+- **已识别优化点:** 架构性能瓶颈、日志监控精细化、微服务间通信优化
+- **未来方向:** 持续演进架构、引入更多自动化测试和监控手段、提升用户体验
+
+---
+
+
+
+ ⭐ 如果您觉得本项目有帮助,请给我们点个 star!
+ 📖 更多信息请查阅项目 Wiki 或提交 issue。
+
+```
\ No newline at end of file
diff --git a/app/payment/biz/fsm/order.go b/app/payment/biz/fsm/order.go
index e079fc0..7c4866e 100644
--- a/app/payment/biz/fsm/order.go
+++ b/app/payment/biz/fsm/order.go
@@ -3,19 +3,15 @@ package fsm
import (
"context"
"fmt"
-
- "github.com/doutokk/doutok/app/payment/biz/pay"
-
- //"github.com/doutokk/doutok/app/payment/infra/rpc"
- //"github.com/doutokk/doutok/rpc_gen/kitex_gen/order"
"time"
- "github.com/doutokk/doutok/app/payment/conf"
- "github.com/doutokk/doutok/common/lock"
-
+ "github.com/cloudwego/kitex/pkg/klog"
"github.com/doutokk/doutok/app/payment/biz/dal/model"
"github.com/doutokk/doutok/app/payment/biz/dal/query"
-
+ "github.com/doutokk/doutok/app/payment/biz/mq"
+ "github.com/doutokk/doutok/app/payment/biz/pay"
+ "github.com/doutokk/doutok/app/payment/conf"
+ "github.com/doutokk/doutok/common/lock"
"github.com/looplab/fsm"
)
@@ -130,6 +126,13 @@ func NewOrder(req CreatePayOrderReq) (*PayOrderFSM, error) {
return nil, fmt.Errorf("failed to create payment log: %w", err)
}
+ // Send delayed message for auto-cancellation after 30 minutes
+ err = mq.SendOrderCancelDelayedMessage(req.OrderId, req.UserId, 30*time.Minute)
+ if err != nil {
+ klog.Warnf("Failed to schedule auto-cancellation for order %s: %v", req.OrderId, err)
+ // Don't fail the order creation if scheduling fails
+ }
+
return o, nil
}
diff --git a/app/payment/biz/mq/rocketmq.go b/app/payment/biz/mq/rocketmq.go
new file mode 100644
index 0000000..0a95d42
--- /dev/null
+++ b/app/payment/biz/mq/rocketmq.go
@@ -0,0 +1,141 @@
+package mq
+
+import (
+ "context"
+ "encoding/json"
+ "fmt"
+ "time"
+
+ "github.com/apache/rocketmq-client-go/v2"
+ "github.com/apache/rocketmq-client-go/v2/consumer"
+ "github.com/apache/rocketmq-client-go/v2/primitive"
+ "github.com/apache/rocketmq-client-go/v2/producer"
+ "github.com/cloudwego/kitex/pkg/klog"
+ "github.com/doutokk/doutok/app/payment/conf"
+)
+
+const (
+ TopicOrderAutoCancel = "topic_order_auto_cancel"
+)
+
+// OrderCancelMessage represents the message structure for order cancellation
+type OrderCancelMessage struct {
+ OrderID string `json:"order_id"`
+ UserID uint32 `json:"user_id"`
+}
+
+var (
+ rocketProducer rocketmq.Producer
+ rocketConsumer rocketmq.PushConsumer
+)
+
+// Initialize sets up RocketMQ producer and consumer
+func Initialize() error {
+ // Initialize producer
+ var err error
+ rocketProducer, err = rocketmq.NewProducer(
+ producer.WithNameServer([]string{conf.GetConf().RocketMQ.NamesrvAddr}),
+ producer.WithGroupName(conf.GetConf().RocketMQ.GroupID),
+ producer.WithRetry(2),
+ )
+ if err != nil {
+ return fmt.Errorf("failed to create RocketMQ producer: %w", err)
+ }
+
+ err = rocketProducer.Start()
+ if err != nil {
+ return fmt.Errorf("failed to start RocketMQ producer: %w", err)
+ }
+
+ klog.Info("RocketMQ producer started successfully")
+ return nil
+}
+
+// CleanUp properly shuts down RocketMQ clients
+func CleanUp() {
+ if rocketProducer != nil {
+ err := rocketProducer.Shutdown()
+ if err != nil {
+ klog.Errorf("Error shutting down RocketMQ producer: %v", err)
+ }
+ }
+
+ if rocketConsumer != nil {
+ err := rocketConsumer.Shutdown()
+ if err != nil {
+ klog.Errorf("Error shutting down RocketMQ consumer: %v", err)
+ }
+ }
+}
+
+// SendOrderCancelDelayedMessage sends a delayed message to auto-cancel an order after the delay period
+func SendOrderCancelDelayedMessage(orderID string, userID uint32, delay time.Duration) error {
+ msg := &OrderCancelMessage{
+ OrderID: orderID,
+ UserID: userID,
+ }
+
+ body, err := json.Marshal(msg)
+ if err != nil {
+ return fmt.Errorf("failed to marshal order cancel message: %w", err)
+ }
+
+ message := primitive.NewMessage(TopicOrderAutoCancel, body)
+
+ // Set the delay level (RocketMQ uses predefined delay levels)
+ // 1s, 5s, 10s, 30s, 1m, 2m, 3m, 4m, 5m, 6m, 7m, 8m, 9m, 10m, 20m, 30m, 1h, 2h
+ // We want 30m, which is level 16
+ message.WithDelayTimeLevel(16) // 30 minutes
+
+ _, err = rocketProducer.SendSync(context.Background(), message)
+ if err != nil {
+ return fmt.Errorf("failed to send delayed message: %w", err)
+ }
+
+ klog.Infof("Sent delayed message for order auto-cancellation: OrderID=%s, UserID=%d", orderID, userID)
+ return nil
+}
+
+// StartOrderCancelConsumer initializes and starts the consumer for order auto-cancellation
+func StartOrderCancelConsumer(handleOrderCancel func(context.Context, string, uint32) error) error {
+ var err error
+ rocketConsumer, err = rocketmq.NewPushConsumer(
+ consumer.WithNameServer([]string{conf.GetConf().RocketMQ.NamesrvAddr}),
+ consumer.WithGroupName(conf.GetConf().RocketMQ.GroupID),
+ consumer.WithConsumerModel(consumer.Clustering),
+ )
+ if err != nil {
+ return fmt.Errorf("failed to create RocketMQ consumer: %w", err)
+ }
+
+ err = rocketConsumer.Subscribe(TopicOrderAutoCancel, consumer.MessageSelector{}, func(ctx context.Context, msgs ...*primitive.MessageExt) (consumer.ConsumeResult, error) {
+ for _, msg := range msgs {
+ var message OrderCancelMessage
+ err := json.Unmarshal(msg.Body, &message)
+ if err != nil {
+ klog.Errorf("Failed to unmarshal order cancel message: %v", err)
+ continue
+ }
+
+ klog.Infof("Received order auto-cancellation message: OrderID=%s, UserID=%d", message.OrderID, message.UserID)
+
+ err = handleOrderCancel(ctx, message.OrderID, message.UserID)
+ if err != nil {
+ klog.Errorf("Failed to auto-cancel order %s: %v", message.OrderID, err)
+ return consumer.ConsumeRetryLater, nil
+ }
+ }
+ return consumer.ConsumeSuccess, nil
+ })
+ if err != nil {
+ return fmt.Errorf("failed to subscribe to topic: %w", err)
+ }
+
+ err = rocketConsumer.Start()
+ if err != nil {
+ return fmt.Errorf("failed to start RocketMQ consumer: %w", err)
+ }
+
+ klog.Info("RocketMQ consumer started successfully")
+ return nil
+}
diff --git a/app/payment/biz/service/auto_cancel_service.go b/app/payment/biz/service/auto_cancel_service.go
new file mode 100644
index 0000000..db3068b
--- /dev/null
+++ b/app/payment/biz/service/auto_cancel_service.go
@@ -0,0 +1,57 @@
+package service
+
+import (
+ "context"
+ "fmt"
+
+ "github.com/cloudwego/kitex/pkg/klog"
+ "github.com/doutokk/doutok/app/payment/biz/dal/query"
+ "github.com/doutokk/doutok/app/payment/biz/fsm"
+)
+
+// AutoCancelOrderService handles automatic cancellation of orders
+type AutoCancelOrderService struct {
+}
+
+// NewAutoCancelOrderService creates a new instance of AutoCancelOrderService
+func NewAutoCancelOrderService() *AutoCancelOrderService {
+ return &AutoCancelOrderService{}
+}
+
+// HandleOrderCancel processes the auto-cancellation of an order
+func (s *AutoCancelOrderService) HandleOrderCancel(ctx context.Context, orderID string, userID uint32) error {
+ klog.Infof("Processing auto-cancellation for order %s", orderID)
+
+ // Check current order status in the database
+ l := query.Q.PaymentLog
+ paymentLog, err := l.Where(l.OrderId.Eq(orderID)).First()
+ if err != nil {
+ return fmt.Errorf("failed to find payment log for order %s: %w", orderID, err)
+ }
+
+ // If the order is already in FINISH state, do nothing
+ if paymentLog.Status == string(fsm.FINISH) {
+ klog.Infof("Order %s is already in FINISH state, skipping auto-cancellation", orderID)
+ return nil
+ }
+
+ // If order is in CANCELLED state, do nothing
+ if paymentLog.Status == string(fsm.CANCELLED) {
+ klog.Infof("Order %s is already in CANCELLED state, skipping auto-cancellation", orderID)
+ return nil
+ }
+
+ // Restore the FSM and cancel the order
+ orderFSM, err := fsm.RestoreFromDB(orderID)
+ if err != nil {
+ return fmt.Errorf("failed to restore order FSM for auto-cancellation: %w", err)
+ }
+
+ err = orderFSM.CancelPayment(ctx)
+ if err != nil {
+ return fmt.Errorf("failed to auto-cancel order %s: %w", orderID, err)
+ }
+
+ klog.Infof("Successfully auto-cancelled order %s after timeout", orderID)
+ return nil
+}
diff --git a/app/payment/conf/conf.go b/app/payment/conf/conf.go
index fea8c92..c0fe297 100644
--- a/app/payment/conf/conf.go
+++ b/app/payment/conf/conf.go
@@ -54,6 +54,11 @@ type Config struct {
CallBackUrl string `mapstructure:"callback_url"`
NotifyBackUrl string `mapstructure:"notifyback_url"`
} `mapstructure:"alipay"`
+
+ RocketMQ struct {
+ NamesrvAddr string `mapstructure:"namesrv_addr"`
+ GroupID string `mapstructure:"group_id"`
+ } `mapstructure:"rocketmq"`
}
// GetConf gets configuration instance
diff --git a/app/payment/conf/conf.yaml b/app/payment/conf/conf.yaml
index 8321280..a77fefa 100644
--- a/app/payment/conf/conf.yaml
+++ b/app/payment/conf/conf.yaml
@@ -26,4 +26,8 @@ alipay:
app_id: "202100011768"
private_key: "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDQ5Q5Q"
callback_url: "http://localhost:8888/payment/alipay/callback"
- notifyback_url: "http://localhost:8888/payment/alipay/notify"
\ No newline at end of file
+ notifyback_url: "http://localhost:8888/payment/alipay/notify"
+
+rocketmq:
+ namesrv_addr: "10.21.22.54:8081"
+ group_id: "payment_group"
diff --git a/app/payment/go.mod b/app/payment/go.mod
index f8d81eb..9ec18d1 100644
--- a/app/payment/go.mod
+++ b/app/payment/go.mod
@@ -5,6 +5,7 @@ go 1.23.4
replace github.com/apache/thrift => github.com/apache/thrift v0.13.0
require (
+ github.com/apache/rocketmq-client-go/v2 v2.1.2
github.com/cloudwego/kitex v0.12.3
github.com/doutokk/doutok/common v0.0.0-20250305072307-bb11ca9f930e
github.com/doutokk/doutok/rpc_gen v0.0.0-20250228054030-051e213e0282
@@ -48,6 +49,7 @@ require (
github.com/cloudwego/thriftgo v0.3.19 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
+ github.com/emirpasic/gods v1.12.0 // indirect
github.com/fatih/color v1.18.0 // indirect
github.com/fatih/structtag v1.2.0 // indirect
github.com/fsnotify/fsnotify v1.8.0 // indirect
@@ -55,8 +57,10 @@ require (
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-redsync/redsync/v4 v4.13.0 // indirect
github.com/go-sql-driver/mysql v1.9.0 // indirect
+ github.com/golang/mock v1.6.0 // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/google/pprof v0.0.0-20250208200701-d0013a598941 // indirect
+ github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.1 // indirect
github.com/hashicorp/consul/api v1.31.2 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
@@ -90,7 +94,9 @@ require (
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/nyaruka/phonenumbers v1.5.0 // indirect
+ github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
github.com/pelletier/go-toml/v2 v2.2.3 // indirect
+ github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/prometheus/client_golang v1.21.0 // indirect
github.com/prometheus/client_model v0.6.1 // indirect
@@ -103,6 +109,7 @@ require (
github.com/smartwalle/ncrypto v1.0.4 // indirect
github.com/smartwalle/ngx v1.0.9 // indirect
github.com/smartwalle/nsign v1.0.9 // indirect
+ github.com/smartystreets/assertions v1.1.0 // indirect
github.com/sourcegraph/conc v0.3.0 // indirect
github.com/spf13/afero v1.12.0 // indirect
github.com/spf13/cast v1.7.1 // indirect
@@ -126,6 +133,7 @@ require (
go.opentelemetry.io/otel/sdk/metric v1.34.0 // indirect
go.opentelemetry.io/otel/trace v1.34.0 // indirect
go.opentelemetry.io/proto/otlp v1.5.0 // indirect
+ go.uber.org/atomic v1.9.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.0 // indirect
golang.org/x/arch v0.14.0 // indirect
@@ -141,8 +149,10 @@ require (
google.golang.org/grpc v1.70.0 // indirect
google.golang.org/protobuf v1.36.5 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
+ gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
gorm.io/datatypes v1.2.5 // indirect
gorm.io/driver/postgres v1.5.9 // indirect
gorm.io/hints v1.1.2 // indirect
+ stathat.com/c/consistent v1.0.0 // indirect
)
diff --git a/app/payment/go.sum b/app/payment/go.sum
index 18bcd24..9ce143b 100644
--- a/app/payment/go.sum
+++ b/app/payment/go.sum
@@ -34,6 +34,8 @@ dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/BurntSushi/toml v1.1.0 h1:ksErzDEI1khOiGPgpwuI7x2ebx/uXQNw7xJpn9Eq1+I=
+github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
@@ -41,6 +43,8 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
+github.com/apache/rocketmq-client-go/v2 v2.1.2 h1:yt73olKe5N6894Dbm+ojRf/JPiP0cxfDNNffKwhpJVg=
+github.com/apache/rocketmq-client-go/v2 v2.1.2/go.mod h1:6I6vgxHR3hzrvn+6n/4mrhS+UTulzK/X9LB2Vk1U5gE=
github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA=
github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4=
@@ -135,6 +139,8 @@ github.com/doutokk/doutok/common v0.0.0-20250305072307-bb11ca9f930e h1:swudHaHJn
github.com/doutokk/doutok/common v0.0.0-20250305072307-bb11ca9f930e/go.mod h1:LO/OoH5fCGPTcs5UfgF/Yrfi/ZfKERZQjKW/izNqyCI=
github.com/doutokk/doutok/rpc_gen v0.0.0-20250228054030-051e213e0282 h1:4Djmmixkw8uP45lmRv2CVs1kSlzpVdI0gRbsMfQLVPM=
github.com/doutokk/doutok/rpc_gen v0.0.0-20250228054030-051e213e0282/go.mod h1:rXEWsslDDfnh2H7CcpwJ4lL+XHhXfRjfOA0LrOBYC3I=
+github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg=
+github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
@@ -147,6 +153,8 @@ github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4
github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
+github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M=
github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
@@ -177,6 +185,7 @@ github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9
github.com/go-sql-driver/mysql v1.9.0 h1:Y0zIbQXhQKmQgTp44Y1dp3wTXcn804QoTptLZT1vtvo=
github.com/go-sql-driver/mysql v1.9.0/go.mod h1:pDetrLJeA3oMujJuvXc8RJoasr589B6A9fwzD3QMrqw=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
+github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA=
@@ -242,15 +251,20 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20220608213341-c488b8fa1db3/go.mod h1:gSuNB+gJaOiQKLEZ+q+PK9Mq3SOzhRcw2GsGS/FhYDk=
github.com/google/pprof v0.0.0-20250208200701-d0013a598941 h1:43XjGa6toxLpeksjcxs1jIoIyr+vUfOqY2c6HB4bpoc=
github.com/google/pprof v0.0.0-20250208200701-d0013a598941/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
+github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
+github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 h1:l5lAOZEym3oK3SQ2HBHWsJUfbNBiTXJDeW2QDxw9AQ0=
+github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.1 h1:e9Rjr40Z98/clHv5Yg79Is0NtosR5LXRvdr7o/6NwbA=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.1/go.mod h1:tIxuGz/9mpox++sgp9fJjHO0+q1X9/UOWd798aAm22M=
@@ -298,9 +312,11 @@ github.com/hashicorp/serf v0.10.2 h1:m5IORhuNSjaxeljg5DeQVDlQyVkhRIjJDimbkCa8aAc
github.com/hashicorp/serf v0.10.2/go.mod h1:T1CmSGfSeGfnfNy/w0odXQUR1rfECGd2Qdsp84DjOiY=
github.com/hertz-contrib/obs-opentelemetry/provider v0.3.0 h1:qg2pljZC8Udaj7H1F/6H/8iDAG6BVucgWGQbFTGlnNI=
github.com/hertz-contrib/obs-opentelemetry/provider v0.3.0/go.mod h1:aMTZ5ZTK/0caxQphajqtWC/520NqA+X2J1eXVPiXT5Y=
+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI=
github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
+github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/ianlancetaylor/demangle v0.0.0-20220319035150-800ac71e25c2/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w=
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
@@ -328,6 +344,8 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
+github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
+github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
@@ -353,6 +371,7 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
@@ -398,11 +417,24 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8m
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/nishanths/predeclared v0.0.0-20200524104333-86fad755b4d3/go.mod h1:nt3d53pc1VYcphSCIaYAJtnPYnr3Zyn8fMq2wvPGPso=
+github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
+github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
github.com/nyaruka/phonenumbers v1.5.0 h1:0M+Gd9zl53QC4Nl5z1Yj1O/zPk2XXBUwR/vlzdXSJv4=
github.com/nyaruka/phonenumbers v1.5.0/go.mod h1:gv+CtldaFz+G3vHHnasBSirAi3O2XLqZzVWz4V1pl2E=
github.com/oleiade/lane v1.0.1/go.mod h1:IyTkraa4maLfjq/GmHR+Dxb4kCMtEGeb+qmhlrQ5Mk4=
+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
+github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
+github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
+github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c=
+github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
+github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
+github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
+github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs=
github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY=
github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
+github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
+github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M=
github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
@@ -462,6 +494,7 @@ github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWR
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
+github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
@@ -474,6 +507,11 @@ github.com/smartwalle/ngx v1.0.9 h1:pUXDvWRZJIHVrCKA1uZ15YwNti+5P4GuJGbpJ4WvpMw=
github.com/smartwalle/ngx v1.0.9/go.mod h1:mx/nz2Pk5j+RBs7t6u6k22MPiBG/8CtOMpCnALIG8Y0=
github.com/smartwalle/nsign v1.0.9 h1:8poAgG7zBd8HkZy9RQDwasC6XZvJpDGQWSjzL2FZL6E=
github.com/smartwalle/nsign v1.0.9/go.mod h1:eY6I4CJlyNdVMP+t6z1H6Jpd4m5/V+8xi44ufSTxXgc=
+github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
+github.com/smartystreets/assertions v1.1.0 h1:MkTeG1DMwsrdH7QtLXy5W+fUxWq+vmb6cLmyJ7aRtF0=
+github.com/smartystreets/assertions v1.1.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=
+github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
+github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
github.com/spf13/afero v1.12.0 h1:UcOPyRBYczmFn6yvphxkn9ZEOY65cpwGKb5mL36mrqs=
@@ -506,6 +544,7 @@ github.com/stvp/tempredis v0.0.0-20181119212430-b82af8480203/go.mod h1:oqN97ltKN
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
github.com/tidwall/gjson v1.9.3/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
+github.com/tidwall/gjson v1.13.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY=
github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
@@ -555,6 +594,9 @@ go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC
go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE=
go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4=
go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4=
+go.uber.org/atomic v1.5.1/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
+go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE=
+go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
@@ -614,6 +656,7 @@ golang.org/x/mod v0.23.0 h1:Zb7khfcRGKk+kqfxFaP5tZqCnDZMjC5VtUBs87Hr6QM=
golang.org/x/mod v0.23.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -636,6 +679,7 @@ golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/
golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
@@ -644,6 +688,7 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
+golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
@@ -678,6 +723,7 @@ golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -688,7 +734,10 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -710,6 +759,7 @@ golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -761,6 +811,7 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
@@ -770,6 +821,7 @@ golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgw
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
@@ -798,6 +850,7 @@ golang.org/x/tools v0.0.0-20200717024301-6ddee64345a6/go.mod h1:njjCfa9FT2d7l9Bc
golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
+golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
@@ -904,8 +957,12 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8=
+gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/validator.v2 v2.0.1 h1:xF0KWyGWXm/LM2G1TrEjqOu4pa6coO9AlWSf3msVfDY=
gopkg.in/validator.v2 v2.0.1/go.mod h1:lIUZBlB3Im4s/eYp39Ry/wkR02yOPhZ9IwIRBjuPuG8=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
@@ -913,6 +970,7 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
@@ -951,3 +1009,5 @@ rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
+stathat.com/c/consistent v1.0.0 h1:ezyc51EGcRPJUxfHGSgJjWzJdj3NiMU9pNfLNGiXV0c=
+stathat.com/c/consistent v1.0.0/go.mod h1:QkzMWzcbB+yQBL2AttO6sgsQS/JSTapcDISJalmCDS0=
diff --git a/app/payment/main.go b/app/payment/main.go
index bf76b99..7d762a1 100644
--- a/app/payment/main.go
+++ b/app/payment/main.go
@@ -1,11 +1,16 @@
package main
import (
+ "net"
+ "os"
+
"github.com/cloudwego/kitex/pkg/klog"
"github.com/cloudwego/kitex/server"
"github.com/doutokk/doutok/app/payment/biz/dal"
"github.com/doutokk/doutok/app/payment/biz/dal/mysql"
"github.com/doutokk/doutok/app/payment/biz/dal/query"
+ "github.com/doutokk/doutok/app/payment/biz/mq"
+ "github.com/doutokk/doutok/app/payment/biz/service"
"github.com/doutokk/doutok/app/payment/conf"
"github.com/doutokk/doutok/app/payment/infra/rpc"
"github.com/doutokk/doutok/common/mtl"
@@ -13,8 +18,6 @@ import (
"github.com/doutokk/doutok/rpc_gen/kitex_gen/payment/paymentservice"
"github.com/joho/godotenv"
kitexlogrus "github.com/kitex-contrib/obs-opentelemetry/logging/logrus"
- "net"
- "os"
)
var serviceName = conf.GetConf().Kitex.Service
@@ -28,9 +31,23 @@ func main() {
query.SetDefault(mysql.DB)
opts := kitexInit()
+ // Initialize RocketMQ
+ err := mq.Initialize()
+ if err != nil {
+ klog.Fatalf("Failed to initialize RocketMQ: %v", err)
+ }
+ defer mq.CleanUp()
+
+ // Start auto-cancellation consumer
+ autoCancelService := service.NewAutoCancelOrderService()
+ err = mq.StartOrderCancelConsumer(autoCancelService.HandleOrderCancel)
+ if err != nil {
+ klog.Fatalf("Failed to start order cancellation consumer: %v", err)
+ }
+
svr := paymentservice.NewServer(new(PaymentServiceImpl), opts...)
- err := svr.Run()
+ err = svr.Run()
if err != nil {
klog.Error(err.Error())
}