package data import ( "context" "datart/data/mongo" "datart/data/rabbit" "datart/log" "fmt" rmq "github.com/rabbitmq/rabbitmq-amqp-go-client/pkg/rabbitmqamqp" ) var eventXQR = rabbit.XQR{ ExchangeName: "event_produce_exchange", QueueName: "event_produce_queue", RoutingKey: "event_produce_route", } var eventPublisher *rmq.Publisher func init() { publisher, err := rabbit.NewPublisher(context.Background(), "default", &eventXQR) if err != nil { panic(err) } eventPublisher = publisher } func PublishEvent(ctx context.Context, event *mongo.Event) error { if err := mongo.InsertOneEvent(ctx, event); err != nil { return err } 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) } }