dataRT/data/rabbit/publish.go

53 lines
1.0 KiB
Go

package rabbit
import (
"context"
rmq "github.com/rabbitmq/rabbitmq-amqp-go-client/pkg/rabbitmqamqp"
)
func NewPublisher(ctx context.Context, tag string, xqk *XQK) (*rmq.Publisher, error) {
cli := client
if tag != "default" {
var err error
cli, err = NewClient(ctx, tag)
if err != nil {
return nil, err
}
}
return cli.conn.NewPublisher(context.Background(), &rmq.ExchangeAddress{
Exchange: xqk.Exchange,
Key: xqk.Key,
}, nil)
}
func Publishing(ctx context.Context, publisher *rmq.Publisher, msgChan <-chan []byte) {
for {
select {
case msg := <-msgChan:
result, err := publisher.Publish(ctx, rmq.NewMessage(msg))
if err != nil {
_ = err // publish error
continue
}
switch result.Outcome.(type) {
case *rmq.StateAccepted:
// "message accepted"
case *rmq.StateReleased:
// "message not routed"
case *rmq.StateRejected:
// "message rejected"
default:
// *rmp.StateModified
// *rmq.StateReceived
}
case <-ctx.Done():
return
}
}
}