dataRT/data/rabbit/manage.go

84 lines
1.4 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"
)
2025-11-06 21:09:50 +08:00
type Manage struct {
2025-09-19 16:17:46 +08:00
m *rmq.AmqpManagement
xName string
x rmq.IExchangeSpecification
qName string
q rmq.IQueueSpecification
bPath string
b rmq.IBindingSpecification
}
2025-11-06 21:09:50 +08:00
func (m *Manage) Init(ctx context.Context, rm *rmq.AmqpManagement,
2025-09-19 16:17:46 +08:00
rx rmq.IExchangeSpecification, rq rmq.IQueueSpecification,
rb rmq.IBindingSpecification) {
m.m = rm
m.x = rx
m.q = rq
m.b = rb
}
2025-11-20 20:58:51 +08:00
func (m *Manage) DeclareExchange(ctx context.Context) error {
xinfo, err := m.m.DeclareExchange(ctx, m.x)
2025-10-11 14:56:11 +08:00
if err != nil {
return err
}
2025-11-20 20:58:51 +08:00
m.xName = xinfo.Name()
2025-10-11 14:56:11 +08:00
return nil
}
2025-11-06 21:09:50 +08:00
func (m *Manage) DeclareAndBind(ctx context.Context) error {
2025-09-19 16:17:46 +08:00
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
}
2025-11-06 21:09:50 +08:00
func (m *Manage) UnbindAndDelete(ctx context.Context) (purged int, err error) {
2025-09-19 16:17:46 +08:00
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
}