后端: 1. 阶段 3 notification 服务边界落地,新增 `cmd/notification`、`services/notification`、`gateway/notification`、`shared/contracts/notification` 和 notification port,按 userauth 同款最小手搓 zrpc 样板收口 2. notification outbox consumer、relay 和 retry loop 迁入独立服务入口,处理 `notification.feishu.requested`,gateway 改为通过 zrpc client 调用 notification 3. 清退旧单体 notification DAO/model/service/provider/runner 和 `service/events/notification_feishu.go`,旧实现不再作为活跃编译路径 4. 修复 outbox 路由归属、dispatch 启动扫描、Kafka topic 探测/投递超时、sending 租约恢复、毒消息 MarkDead 错误回传和 RPC timeout 边界 5. 同步调整 active-scheduler 触发通知事件、核心 outbox handler、MySQL 迁移边界和 notification 配置 文档: 1. 更新微服务迁移计划,将阶段 3 notification 标记为已完成,并明确下一阶段从 active-scheduler 开始
55 lines
1.2 KiB
Go
55 lines
1.2 KiB
Go
package rpc
|
|
|
|
import (
|
|
"errors"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/LoveLosita/smartflow/backend/services/notification/rpc/pb"
|
|
notificationsv "github.com/LoveLosita/smartflow/backend/services/notification/sv"
|
|
"github.com/zeromicro/go-zero/core/service"
|
|
"github.com/zeromicro/go-zero/zrpc"
|
|
"google.golang.org/grpc"
|
|
)
|
|
|
|
const (
|
|
defaultListenOn = "0.0.0.0:9082"
|
|
defaultTimeout = 6 * time.Second
|
|
)
|
|
|
|
type ServerOptions struct {
|
|
ListenOn string
|
|
Timeout time.Duration
|
|
Service *notificationsv.Service
|
|
}
|
|
|
|
func NewServer(opts ServerOptions) (*zrpc.RpcServer, string, error) {
|
|
if opts.Service == nil {
|
|
return nil, "", errors.New("notification service dependency not initialized")
|
|
}
|
|
|
|
listenOn := strings.TrimSpace(opts.ListenOn)
|
|
if listenOn == "" {
|
|
listenOn = defaultListenOn
|
|
}
|
|
timeout := opts.Timeout
|
|
if timeout <= 0 {
|
|
timeout = defaultTimeout
|
|
}
|
|
|
|
server, err := zrpc.NewServer(zrpc.RpcServerConf{
|
|
ServiceConf: service.ServiceConf{
|
|
Name: "notification.rpc",
|
|
Mode: service.DevMode,
|
|
},
|
|
ListenOn: listenOn,
|
|
Timeout: int64(timeout / time.Millisecond),
|
|
}, func(grpcServer *grpc.Server) {
|
|
pb.RegisterNotificationServer(grpcServer, NewHandler(opts.Service))
|
|
})
|
|
if err != nil {
|
|
return nil, "", err
|
|
}
|
|
return server, listenOn, nil
|
|
}
|