feat: max channels for rabbitmq (#2365)

* feat: max conns for rabbitmq

* rename conns -> chans
This commit is contained in:
abelanger5
2025-09-30 08:49:45 -04:00
committed by GitHub
parent 806931f8c6
commit 2edeeb10ea
4 changed files with 38 additions and 6 deletions

View File

@@ -51,7 +51,7 @@ func (p *channelPool) hasActiveConnection() bool {
return p.conn != nil && !p.conn.IsClosed()
}
func newChannelPool(ctx context.Context, l *zerolog.Logger, url string) (*channelPool, error) {
func newChannelPool(ctx context.Context, l *zerolog.Logger, url string, maxChannels int32) (*channelPool, error) {
p := &channelPool{
l: l,
url: url,
@@ -116,7 +116,7 @@ func newChannelPool(ctx context.Context, l *zerolog.Logger, url string) (*channe
}()
// FIXME: this is probably too many channels
maxPoolSize := int32(100)
maxPoolSize := maxChannels
pool, err := puddle.NewPool(&puddle.Config[*amqp.Channel]{
Constructor: constructor,

View File

@@ -59,6 +59,8 @@ type MessageQueueImplOpts struct {
qos int
disableTenantExchangePubs bool
deadLetterBackoff time.Duration
maxPubChannels int32
maxSubChannels int32
}
func defaultMessageQueueImplOpts() *MessageQueueImplOpts {
@@ -83,6 +85,18 @@ func WithURL(url string) MessageQueueImplOpt {
}
}
func WithMaxPubChannels(maxConns int32) MessageQueueImplOpt {
return func(opts *MessageQueueImplOpts) {
opts.maxPubChannels = maxConns
}
}
func WithMaxSubChannels(maxConns int32) MessageQueueImplOpt {
return func(opts *MessageQueueImplOpts) {
opts.maxSubChannels = maxConns
}
}
func WithQos(qos int) MessageQueueImplOpt {
return func(opts *MessageQueueImplOpts) {
opts.qos = qos
@@ -114,14 +128,26 @@ func New(fs ...MessageQueueImplOpt) (func() error, *MessageQueueImpl) {
newLogger := opts.l.With().Str("service", "rabbitmq").Logger()
opts.l = &newLogger
pubChannelPool, err := newChannelPool(ctx, opts.l, opts.url)
pubMaxChans := opts.maxPubChannels
if pubMaxChans <= 0 {
pubMaxChans = 20
}
pubChannelPool, err := newChannelPool(ctx, opts.l, opts.url, pubMaxChans)
if err != nil {
cancel()
return nil, nil
}
subChannelPool, err := newChannelPool(ctx, opts.l, opts.url)
subMaxChans := opts.maxSubChannels
if subMaxChans <= 0 {
subMaxChans = 100
}
subChannelPool, err := newChannelPool(ctx, opts.l, opts.url, subMaxChans)
if err != nil {
pubChannelPool.Close()