snapshot of https://github.com/ThreeDotsLabs/watermill.git (master, 2026-09-15; blobs > 131072B omitted)
Some checks failed
master / ci (push) Failing after 0s
Some checks failed
master / ci (push) Failing after 0s
This commit is contained in:
@@ -0,0 +1,163 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/ThreeDotsLabs/watermill"
|
||||
"github.com/ThreeDotsLabs/watermill-redisstream/pkg/redisstream"
|
||||
"github.com/ThreeDotsLabs/watermill-routing-example/server/common"
|
||||
"github.com/ThreeDotsLabs/watermill/components/cqrs"
|
||||
"github.com/ThreeDotsLabs/watermill/message"
|
||||
"github.com/ThreeDotsLabs/watermill/message/router/middleware"
|
||||
"github.com/redis/go-redis/v9"
|
||||
)
|
||||
|
||||
var (
|
||||
replica = os.Getenv("REPLICA")
|
||||
serviceName = "crm-service"
|
||||
serviceNameWithReplica = serviceName + "-" + replica
|
||||
)
|
||||
|
||||
func main() {
|
||||
logger := watermill.NewStdLogger(false, false)
|
||||
|
||||
router, err := message.NewRouter(message.RouterConfig{}, logger)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
pubClient := redis.NewClient(&redis.Options{
|
||||
Addr: "redis:6379",
|
||||
})
|
||||
publisher, err := redisstream.NewPublisher(
|
||||
redisstream.PublisherConfig{
|
||||
Client: pubClient,
|
||||
},
|
||||
logger,
|
||||
)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
router.AddMiddleware(middleware.Recoverer)
|
||||
router.AddMiddleware(common.NotifyMiddleware(publisher, serviceNameWithReplica))
|
||||
|
||||
subClient := redis.NewClient(&redis.Options{
|
||||
Addr: "redis:6379",
|
||||
})
|
||||
|
||||
subscriber, err := redisstream.NewSubscriber(
|
||||
redisstream.SubscriberConfig{
|
||||
Client: subClient,
|
||||
ConsumerGroup: "",
|
||||
},
|
||||
logger,
|
||||
)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
if replica == "1" {
|
||||
router.AddConsumerHandler(
|
||||
"OnUserSignedUp-2",
|
||||
"UserSignedUp-2",
|
||||
subscriber,
|
||||
func(msg *message.Message) error {
|
||||
var event common.UserSignedUp
|
||||
err := json.Unmarshal(msg.Payload, &event)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
fmt.Println("Adding user", event.UserID, "to the CRM")
|
||||
|
||||
return nil
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
if replica == "1" {
|
||||
eventProc8, err := cqrs.NewEventProcessorWithConfig(router, cqrs.EventProcessorConfig{
|
||||
GenerateSubscribeTopic: func(params cqrs.EventProcessorGenerateSubscribeTopicParams) (string, error) {
|
||||
return fmt.Sprintf("%s-8", params.EventName), nil
|
||||
},
|
||||
SubscriberConstructor: func(params cqrs.EventProcessorSubscriberConstructorParams) (message.Subscriber, error) {
|
||||
handlerName := strings.Split(params.HandlerName, "-")[0]
|
||||
return redisstream.NewSubscriber(
|
||||
redisstream.SubscriberConfig{
|
||||
Client: subClient,
|
||||
ConsumerGroup: fmt.Sprintf("%s_%s", serviceName, handlerName),
|
||||
},
|
||||
logger,
|
||||
)
|
||||
},
|
||||
Marshaler: cqrs.JSONMarshaler{
|
||||
GenerateName: cqrs.StructName,
|
||||
},
|
||||
Logger: logger,
|
||||
})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
err = eventProc8.AddHandlers(
|
||||
cqrs.NewEventHandler("AddToCRM-8", HandleCRM),
|
||||
cqrs.NewEventHandler("AddToSupport-8", HandleSupport),
|
||||
)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
eventProc9, err := cqrs.NewEventProcessorWithConfig(router, cqrs.EventProcessorConfig{
|
||||
GenerateSubscribeTopic: func(params cqrs.EventProcessorGenerateSubscribeTopicParams) (string, error) {
|
||||
return fmt.Sprintf("%s-9", params.EventName), nil
|
||||
},
|
||||
SubscriberConstructor: func(params cqrs.EventProcessorSubscriberConstructorParams) (message.Subscriber, error) {
|
||||
handlerName := strings.Split(params.HandlerName, "-")[0]
|
||||
return redisstream.NewSubscriber(
|
||||
redisstream.SubscriberConfig{
|
||||
Client: subClient,
|
||||
ConsumerGroup: fmt.Sprintf("%s_%s", serviceName, handlerName),
|
||||
},
|
||||
logger,
|
||||
)
|
||||
},
|
||||
Marshaler: cqrs.JSONMarshaler{
|
||||
GenerateName: cqrs.StructName,
|
||||
},
|
||||
Logger: logger,
|
||||
})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
err = eventProc9.AddHandlers(
|
||||
cqrs.NewEventHandler("AddToCRM-9", HandleCRM),
|
||||
cqrs.NewEventHandler("AddToSupport-9", HandleSupport),
|
||||
)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
err = router.Run(context.Background())
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func HandleCRM(ctx context.Context, e *common.UserSignedUp) error {
|
||||
fmt.Println("Adding user", e.UserID, "to the CRM")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func HandleSupport(ctx context.Context, e *common.UserSignedUp) error {
|
||||
fmt.Println("Adding user", e.UserID, "to the support channel")
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user