dataRT/data/rabbit/management.go

74 lines
1.2 KiB
Go
Raw Normal View History

2025-09-19 16:17:46 +08:00
package rabbit
import (
"context"
rmq "github.com/rabbitmq/rabbitmq-amqp-go-client/pkg/rabbitmqamqp"
)
type Management struct {
m *rmq.AmqpManagement
xName string
x rmq.IExchangeSpecification
qName string
q rmq.IQueueSpecification
bPath string
b rmq.IBindingSpecification
}
func (m *Management) Init(ctx context.Context, rm *rmq.AmqpManagement,
rx rmq.IExchangeSpecification, rq rmq.IQueueSpecification,
rb rmq.IBindingSpecification) {
m.m = rm
m.x = rx
m.q = rq
m.b = rb
}
func (m *Management) DeclareAndBind(ctx context.Context) error {
xinfo, err := m.m.DeclareExchange(ctx, m.x)
if err != nil {
return err
}
m.xName = xinfo.Name()
qinfo, err := m.m.DeclareQueue(ctx, m.q)
if err != nil {
return err
}
m.qName = qinfo.Name()
bPath, err := m.m.Bind(ctx, m.b)
if err != nil {
return err
}
m.bPath = bPath
return nil
}
func (m *Management) UnbindAndDelete(ctx context.Context) (purged int, err error) {
err = m.m.Unbind(ctx, m.bPath)
if err != nil {
return
}
err = m.m.DeleteExchange(ctx, m.xName)
if err != nil {
return
}
purged, err = m.m.PurgeQueue(ctx, m.qName)
if err != nil {
return
}
err = m.m.DeleteQueue(ctx, m.qName)
if err != nil {
return
}
return
}