Add RabbitMQ connect retry and healthcheck
This commit is contained in:
@@ -100,11 +100,32 @@ func InitializeQueue(jobsQueueName, resultsQueueName string) (*RabbitMQQueue, er
|
||||
|
||||
rabbitMQURL := fmt.Sprintf("amqp://%s:%s@%s:%s/", rabbitMQUser, rabbitMQPassword, rabbitMQHost, rabbitMQPort)
|
||||
|
||||
conn, err := amqp.Dial(rabbitMQURL)
|
||||
const (
|
||||
tryCount = 5
|
||||
retryDelaySec = 3
|
||||
)
|
||||
|
||||
var conn *amqp.Connection
|
||||
var err error
|
||||
|
||||
for i := 0; i < tryCount; i++ {
|
||||
slog.Info("Attempting to connect to RabbitMQ", slog.Int("attempt", i+1))
|
||||
conn, err = amqp.Dial(rabbitMQURL)
|
||||
if err != nil {
|
||||
slog.Warn("Failed to connect to RabbitMQ: %w", err)
|
||||
if i < tryCount-1 {
|
||||
slog.Info("Retrying in %d seconds", retryDelaySec)
|
||||
time.Sleep(retryDelaySec * time.Second)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to connect to RabbitMQ: %w", err)
|
||||
}
|
||||
|
||||
slog.Info("Connected to RabbitMQ")
|
||||
|
||||
ch, err := conn.Channel()
|
||||
if err != nil {
|
||||
conn.Close()
|
||||
|
||||
@@ -32,8 +32,10 @@ services:
|
||||
networks:
|
||||
- backend
|
||||
healthcheck:
|
||||
test: [ "CMD", "rabbitmqctl", "status" ]
|
||||
interval: 1s
|
||||
test: [ "CMD", "nc", "-z", "localhost", "5672" ]
|
||||
interval: 5s
|
||||
timeout: 15s
|
||||
retries: 1
|
||||
|
||||
server:
|
||||
build:
|
||||
|
||||
Reference in New Issue
Block a user