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, ) }