From 1a574c2f7f3c2ebf6a54dd59ef2e63e574130736 Mon Sep 17 00:00:00 2001 From: Nicolas Will Date: Sat, 15 Jun 2024 00:39:21 +0200 Subject: [PATCH] Add RabbitMQ connect retry and healthcheck --- cmd/agent/main.go | 23 ++++++++++++++++++++++- docker-compose.yml | 6 ++++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/cmd/agent/main.go b/cmd/agent/main.go index 83ae80a..6326323 100644 --- a/cmd/agent/main.go +++ b/cmd/agent/main.go @@ -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() diff --git a/docker-compose.yml b/docker-compose.yml index 97e3a8e..a74cbac 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -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: