Update dependencies, enhance NATS consumer configuration, and improve error handling in message processing. Introduce telemetry support with OpenTelemetry for tracing and metrics. Refactor README to include new configuration options and update tests for improved coverage of error scenarios.

This commit is contained in:
windyboy
2025-11-15 09:01:24 +08:00
parent 31839cf21f
commit 359e7694ab
31 changed files with 1326 additions and 667 deletions
+103 -32
View File
@@ -1,5 +1,6 @@
// Code generated by Wire. DO NOT EDIT.
//go:generate go run -mod=mod github.com/google/wire/cmd/wire
//go:build !wireinject
// +build !wireinject
@@ -12,44 +13,114 @@ import (
"caatsm/internal/infra/log"
"caatsm/internal/infra/nats"
"caatsm/internal/infra/postgres"
"github.com/google/wire"
)
// Injectors from wire.go:
func buildAppComponents() (*appComponents, error) {
parserParser := parser.ProvideParser()
configConfig, err := config.ProvideConfig()
if err != nil {
return nil, err
}
pool, err := postgres.ProvideDB(configConfig)
if err != nil {
return nil, err
}
logger, err := log.ProvideLogger(configConfig)
if err != nil {
return nil, err
}
repository, err := postgres.ProvideRepository(pool, logger)
if err != nil {
return nil, err
}
conn, err := nats.ProvideNATSConn(configConfig, logger)
if err != nil {
return nil, err
}
jetStreamContext, err := nats.ProvideJetStream(conn, configConfig, logger)
if err != nil {
return nil, err
}
publisher, err := nats.ProvidePublisher(jetStreamContext, configConfig, logger)
if err != nil {
return nil, err
}
messageProcessor := app.NewMessageProcessor(parserParser, repository, publisher, logger)
consumer, err := nats.ProvideConsumer(conn, jetStreamContext, messageProcessor, configConfig, logger)
if err != nil {
return nil, err
}
diAppComponents := &appComponents{
Processor: messageProcessor,
Consumer: consumer,
}
return diAppComponents, nil
}
func buildAppComponentsWithConfig(cfg *config.Config) (*appComponents, error) {
parserParser := parser.ProvideParser()
pool, err := postgres.ProvideDB(cfg)
if err != nil {
return nil, err
}
logger, err := log.ProvideLogger(cfg)
if err != nil {
return nil, err
}
repository, err := postgres.ProvideRepository(pool, logger)
if err != nil {
return nil, err
}
conn, err := nats.ProvideNATSConn(cfg, logger)
if err != nil {
return nil, err
}
jetStreamContext, err := nats.ProvideJetStream(conn, cfg, logger)
if err != nil {
return nil, err
}
publisher, err := nats.ProvidePublisher(jetStreamContext, cfg, logger)
if err != nil {
return nil, err
}
messageProcessor := app.NewMessageProcessor(parserParser, repository, publisher, logger)
consumer, err := nats.ProvideConsumer(conn, jetStreamContext, messageProcessor, cfg, logger)
if err != nil {
return nil, err
}
diAppComponents := &appComponents{
Processor: messageProcessor,
Consumer: consumer,
}
return diAppComponents, nil
}
// wire.go:
// InitializeApp initializes the application with all dependencies
func InitializeApp() (*app.MessageProcessor, *nats.Consumer, error) {
configConfig, err := config.ProvideConfig()
comps, err := buildAppComponents()
if err != nil {
return nil, nil, err
}
zapLogger, err := log.ProvideLogger(configConfig)
if err != nil {
return nil, nil, err
}
pgxpoolPool, err := postgres.ProvideDB(configConfig)
if err != nil {
return nil, nil, err
}
adapterRepository, err := postgres.ProvideRepository(pgxpoolPool, zapLogger)
if err != nil {
return nil, nil, err
}
natsConn, err := nats.ProvideNATSConn(configConfig, zapLogger)
if err != nil {
return nil, nil, err
}
natsJetStreamContext, err := nats.ProvideJetStream(natsConn, configConfig, zapLogger)
if err != nil {
return nil, nil, err
}
adapterPublisher, err := nats.ProvidePublisher(natsJetStreamContext, configConfig, zapLogger)
if err != nil {
return nil, nil, err
}
parserParser := parser.ProvideParser()
appMessageProcessor := app.NewMessageProcessor(parserParser, adapterRepository, adapterPublisher, zapLogger)
natsConsumer, err := nats.ProvideConsumer(natsConn, natsJetStreamContext, appMessageProcessor, configConfig, zapLogger)
if err != nil {
return nil, nil, err
}
return appMessageProcessor, natsConsumer, nil
return comps.Processor, comps.Consumer, nil
}
// InitializeAppWithConfig wires dependencies using a pre-loaded configuration.
func InitializeAppWithConfig(cfg *config.Config) (*app.MessageProcessor, *nats.Consumer, error) {
comps, err := buildAppComponentsWithConfig(cfg)
if err != nil {
return nil, nil, err
}
return comps.Processor, comps.Consumer, nil
}
var runtimeSet = wire.NewSet(log.ProvideLogger, postgres.ProvideDB, postgres.ProvideRepository, nats.ProvideNATSConn, nats.ProvideJetStream, nats.ProvidePublisher, parser.ProvideParser, app.NewMessageProcessor, nats.ProvideConsumer)
type appComponents struct {
Processor *app.MessageProcessor
Consumer *nats.Consumer
}