go-eagle / eagle

🦅 A Go framework for the API or Microservice
https://go-eagle.org
MIT License
2.05k stars 226 forks source link

wire生成wire_gen.go文件报错 #127

Open exqmjmz opened 7 months ago

exqmjmz commented 7 months ago

cmd.zip 上面是我的cmd目录下的文件 在server目录中,执行wire ./... 生成wire_gen.go报错提示

wire: /Users/liangjiaming/code/eagle-demo/cmd/server/wire.go:16:1: inject InitApp: no provider found for github.com/go-eagle/eagle/pkg/transport/consumer/redis.Server needed by github.com/go-eagle/eagle/pkg/app.App in provider "newApp" (/Users/liangjiaming/code/eagle-demo/cmd/server/main.go:100:6) wire: eagle-demo/cmd/server: generate failed wire: at least one generate failure

qloog commented 7 months ago

我本地执行没有问题,看一下你的eagle版本, 最新版本是 v0.17.0, 如果不是需要升级一下。

❯ eagle -v
eagle version v0.17.0

# 升级
eagle upgrade

另外,光提供cmd目录下的文件是不管用的,很多依赖文件都没有。

exqmjmz commented 7 months ago

我本地执行没有问题,看一下你的eagle版本, 最新版本是 v0.17.0, 如果不是需要升级一下。

❯ eagle -v
eagle version v0.17.0

# 升级
eagle upgrade

另外,光提供cmd目录下的文件是不管用的,很多依赖文件都没有。 eagle-demo-copy.zip 这个是整个项目的代码

qloog commented 7 months ago

已经找到问题,首先这不是最新创建的项目代码,所以会和模板创建的有所差异。

针对你给的代码,修改如下:

// cmd/server/main.go
// 修改前
func newApp(cfg *eagle.Config, hs *httpSrv.Server, cs *redisMQ.Server) *eagle.App {
    return eagle.New(
        eagle.WithName(cfg.Name),
        eagle.WithVersion(cfg.Version),
        eagle.WithLogger(logger.GetLogger()),
        eagle.WithServer(
            // init HTTP server
            hs,
            // init
            cs,
        ),
    )
}

// 修改步骤
// 1. 移除 18 行的
redisMQ "github.com/go-eagle/eagle/pkg/transport/consumer/redis"

// 2. 修改 newApp 如下:
func newApp(cfg *eagle.Config, hs *httpSrv.Server) *eagle.App {
    return eagle.New(
        eagle.WithName(cfg.Name),
        eagle.WithVersion(cfg.Version),
        eagle.WithLogger(logger.GetLogger()),
        eagle.WithServer(
            // init HTTP server
            hs,
        ),
    )
}

然后重新运行 wire 即可。

exqmjmz commented 7 months ago

已经找到问题,首先这不是最新创建的项目代码,所以会和模板创建的有所差异。

针对你给的代码,修改如下:

// cmd/server/main.go
// 修改前
func newApp(cfg *eagle.Config, hs *httpSrv.Server, cs *redisMQ.Server) *eagle.App {
  return eagle.New(
      eagle.WithName(cfg.Name),
      eagle.WithVersion(cfg.Version),
      eagle.WithLogger(logger.GetLogger()),
      eagle.WithServer(
          // init HTTP server
          hs,
          // init
          cs,
      ),
  )
}

// 修改步骤
// 1. 移除 18 行的
redisMQ "github.com/go-eagle/eagle/pkg/transport/consumer/redis"

// 2. 修改 newApp 如下:
func newApp(cfg *eagle.Config, hs *httpSrv.Server) *eagle.App {
  return eagle.New(
      eagle.WithName(cfg.Name),
      eagle.WithVersion(cfg.Version),
      eagle.WithLogger(logger.GetLogger()),
      eagle.WithServer(
          // init HTTP server
          hs,
      ),
  )
}

然后重新运行 wire 即可。

移除后,没办法既是server端又是consumer,导则asynq那边的任务队列,没法执行了,一直都是pending状态 我是想实现单体程序架构

qloog commented 7 months ago

想放到一个服务里,明白了。目前根据报错提示是缺少一个 redis server 依赖,需要在 internal/server/server.go 里进行注入 NewConsumerServer, 具体如下:

// 修改前
var ProviderSet = wire.NewSet(NewHTTPServer)

// 修改后
var ProviderSet = wire.NewSet(NewHTTPServer, NewConsumerServer)

然后 运行 wire, Well Done. Good Luck.