dataRT/data/publish_event.go

67 lines
1.3 KiB
Go
Raw Normal View History

2025-10-11 14:56:11 +08:00
package data
2025-10-23 18:02:29 +08:00
import (
"context"
"datart/data/mongo"
"datart/data/rabbit"
"datart/log"
"fmt"
rmq "github.com/rabbitmq/rabbitmq-amqp-go-client/pkg/rabbitmqamqp"
)
2025-11-06 21:09:50 +08:00
var eventXQK = rabbit.XQK{
Exchange: "event_produce_exchange",
// Key: "event_produce_key",
2025-10-23 18:02:29 +08:00
}
var eventPublisher *rmq.Publisher
func init() {
2025-11-06 21:09:50 +08:00
publisher, err := rabbit.NewPublisher(context.Background(), "default", &eventXQK)
2025-10-23 18:02:29 +08:00
if err != nil {
panic(err)
}
eventPublisher = publisher
}
func PublishEvent(ctx context.Context, event *mongo.Event) error {
data, err := event.Marshall()
if err != nil {
return err
}
result, err := eventPublisher.Publish(ctx, rmq.NewMessage(data))
if err != nil {
return err
}
switch result.Outcome.(type) {
case *rmq.StateAccepted:
// TODO: "Message accepted"
case *rmq.StateReleased:
return fmt.Errorf("message not routed: %v", event)
case *rmq.StateRejected:
return fmt.Errorf("message rejected: %v", event)
default:
return fmt.Errorf("invalid message %v state: %v", event, result.Outcome)
}
return nil
}
func GenEvent(data []byte, ip string) (*mongo.Event, error) {
alarm, err := mongo.UnmarshallToAlarm(data)
if err != nil {
return nil, err
}
return alarm.ConvertToEvent(ip), nil
}
func CloseEventPublisher(ctx context.Context) {
if err := eventPublisher.Close(ctx); err != nil {
log.Error(err)
}
}