You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

198 lines
4.4 KiB

package channelmanager
import (
amqp "github.com/rabbitmq/amqp091-go"
)
// ConsumeSafe safely wraps the (*amqp.Channel).Consume method
func (chanManager *ChannelManager) ConsumeSafe(
queue,
consumer string,
autoAck,
exclusive,
noLocal,
noWait bool,
args amqp.Table,
) (<-chan amqp.Delivery, error) {
chanManager.channelMux.RLock()
defer chanManager.channelMux.RUnlock()
return chanManager.channel.Consume(
queue,
consumer,
autoAck,
exclusive,
noLocal,
noWait,
args,
)
}
// QueueDeclarePassiveSafe safely wraps the (*amqp.Channel).QueueDeclarePassive method
func (chanManager *ChannelManager) QueueDeclarePassiveSafe(
name string,
durable bool,
autoDelete bool,
exclusive bool,
noWait bool,
args amqp.Table,
) (amqp.Queue, error) {
chanManager.channelMux.RLock()
defer chanManager.channelMux.RUnlock()
return chanManager.channel.QueueDeclarePassive(
name,
durable,
autoDelete,
exclusive,
noWait,
args,
)
}
// QueueDeclareSafe safely wraps the (*amqp.Channel).QueueDeclare method
func (chanManager *ChannelManager) QueueDeclareSafe(
name string, durable bool, autoDelete bool, exclusive bool, noWait bool, args amqp.Table,
) (amqp.Queue, error) {
chanManager.channelMux.RLock()
defer chanManager.channelMux.RUnlock()
return chanManager.channel.QueueDeclare(
name,
durable,
autoDelete,
exclusive,
noWait,
args,
)
}
// ExchangeDeclarePassiveSafe safely wraps the (*amqp.Channel).ExchangeDeclarePassive method
func (chanManager *ChannelManager) ExchangeDeclarePassiveSafe(
name string, kind string, durable bool, autoDelete bool, internal bool, noWait bool, args amqp.Table,
) error {
chanManager.channelMux.RLock()
defer chanManager.channelMux.RUnlock()
return chanManager.channel.ExchangeDeclarePassive(
name,
kind,
durable,
autoDelete,
internal,
noWait,
args,
)
}
// ExchangeDeclareSafe safely wraps the (*amqp.Channel).ExchangeDeclare method
func (chanManager *ChannelManager) ExchangeDeclareSafe(
name string, kind string, durable bool, autoDelete bool, internal bool, noWait bool, args amqp.Table,
) error {
chanManager.channelMux.RLock()
defer chanManager.channelMux.RUnlock()
return chanManager.channel.ExchangeDeclare(
name,
kind,
durable,
autoDelete,
internal,
noWait,
args,
)
}
// QueueBindSafe safely wraps the (*amqp.Channel).QueueBind method
func (chanManager *ChannelManager) QueueBindSafe(
name string, key string, exchange string, noWait bool, args amqp.Table,
) error {
chanManager.channelMux.RLock()
defer chanManager.channelMux.RUnlock()
return chanManager.channel.QueueBind(
name,
key,
exchange,
noWait,
args,
)
}
// QosSafe safely wraps the (*amqp.Channel).Qos method
func (chanManager *ChannelManager) QosSafe(
prefetchCount int, prefetchSize int, global bool,
) error {
chanManager.channelMux.RLock()
defer chanManager.channelMux.RUnlock()
return chanManager.channel.Qos(
prefetchCount,
prefetchSize,
global,
)
}
// PublishSafe safely wraps the (*amqp.Channel).Publish method
func (chanManager *ChannelManager) PublishSafe(
exchange string, key string, mandatory bool, immediate bool, msg amqp.Publishing,
) error {
chanManager.channelMux.RLock()
defer chanManager.channelMux.RUnlock()
return chanManager.channel.Publish(
exchange,
key,
mandatory,
immediate,
msg,
)
}
// NotifyReturnSafe safely wraps the (*amqp.Channel).NotifyReturn method
func (chanManager *ChannelManager) NotifyReturnSafe(
c chan amqp.Return,
) chan amqp.Return {
chanManager.channelMux.RLock()
defer chanManager.channelMux.RUnlock()
return chanManager.channel.NotifyReturn(
c,
)
}
// ConfirmSafe safely wraps the (*amqp.Channel).Confirm method
func (chanManager *ChannelManager) ConfirmSafe(
noWait bool,
) error {
chanManager.channelMux.RLock()
defer chanManager.channelMux.RUnlock()
return chanManager.channel.Confirm(
noWait,
)
}
// NotifyPublishSafe safely wraps the (*amqp.Channel).NotifyPublish method
func (chanManager *ChannelManager) NotifyPublishSafe(
confirm chan amqp.Confirmation,
) chan amqp.Confirmation {
chanManager.channelMux.RLock()
defer chanManager.channelMux.RUnlock()
return chanManager.channel.NotifyPublish(
confirm,
)
}
// NotifyFlowSafe safely wraps the (*amqp.Channel).NotifyFlow method
func (chanManager *ChannelManager) NotifyFlowSafe(
c chan bool,
) chan bool {
chanManager.channelMux.RLock()
defer chanManager.channelMux.RUnlock()
return chanManager.channel.NotifyFlow(
c,
)
}