Skip to content

Commit 64a1bad

Browse files
committed
fix: update docker-compose
1 parent e48bc7e commit 64a1bad

File tree

7 files changed

+73
-25
lines changed

7 files changed

+73
-25
lines changed

apps/docker-compose.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ services:
6868
- apps_network
6969
volumes:
7070
- ./history-service:/history-service
71+
depends_on:
72+
- rabbitmq
7173

7274
signalling-service:
7375
build:
@@ -95,6 +97,8 @@ services:
9597
volumes:
9698
- ./execution-service:/execution-service
9799
- /var/run/docker.sock:/var/run/docker.sock
100+
depends_on:
101+
- rabbitmq
98102

99103
redis:
100104
image: redis:latest
@@ -104,7 +108,7 @@ services:
104108
- 6379:6379
105109
container_name: redis-container
106110

107-
rabbit-mq:
111+
rabbitmq:
108112
image: rabbitmq:3-management
109113
networks:
110114
- apps_network

apps/execution-service/.env.example

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ PORT=8083
33

44
# If you are NOT USING docker, use the below variables
55
# HISTORY_SERVICE_URL=http://localhost:8082/
6+
# RABBITMQ_URL=amqp://guest:guest@localhost:5672/
67

78
# If you are USING docker, use the below variables
89
HISTORY_SERVICE_URL=http://history-service:8082/
10+
RABBITMQ_URL=amqp://guest:guest@rabbitmq:5672/

apps/execution-service/main.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,6 @@ func main() {
2525
err := godotenv.Load()
2626
utils.FailOnError(err, "Error loading .env file")
2727

28-
amqpChannel := messagequeue.InitRabbitMQServer()
29-
defer amqpChannel.Close()
30-
3128
// Initialize Firestore client
3229
ctx := context.Background()
3330
client, err := initFirestore(ctx)
@@ -36,6 +33,10 @@ func main() {
3633

3734
service := &handlers.Service{Client: client}
3835

36+
amqpConnection, amqpChannel := messagequeue.InitRabbitMQServer()
37+
defer amqpConnection.Close()
38+
defer amqpChannel.Close()
39+
3940
r := initChiRouter(service)
4041
initRestServer(r)
4142
}

apps/execution-service/messagequeue/rabbitmq.go

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,23 @@ import (
55
"fmt"
66
"log"
77
"os"
8+
"time"
89

910
amqp "github.com/rabbitmq/amqp091-go"
1011
)
1112

12-
const CODE_SUBMISSION_QUEUE_KEY = "code-submission"
13+
const (
14+
CODE_SUBMISSION_QUEUE_KEY = "code-submission"
15+
NUM_RETRIES = 10
16+
)
1317

1418
var (
1519
codeSubmissionQueue amqp.Queue
1620
rabbitMQChannel *amqp.Channel
1721
)
1822

19-
func InitRabbitMQServer() *amqp.Channel {
20-
// Connect to RabbitMQ server
21-
rabbitMQURL := os.Getenv("RABBITMQ_URL")
22-
conn, err := amqp.Dial(rabbitMQURL)
23-
utils.FailOnError(err, "Failed to connect to RabbitMQ")
24-
defer conn.Close()
23+
func InitRabbitMQServer() (*amqp.Connection, *amqp.Channel) {
24+
conn := connectToRabbitMQ()
2525

2626
// Create a channel
2727
ch, err := conn.Channel()
@@ -40,7 +40,24 @@ func InitRabbitMQServer() *amqp.Channel {
4040
utils.FailOnError(err, "Failed to declare a queue")
4141
codeSubmissionQueue = q
4242

43-
return ch
43+
return conn, ch
44+
}
45+
46+
func connectToRabbitMQ() *amqp.Connection {
47+
var conn *amqp.Connection
48+
var err error
49+
rabbitMQURL := os.Getenv("RABBITMQ_URL")
50+
for i := 0; i < NUM_RETRIES; i++ { // Retry up to 10 times
51+
conn, err = amqp.Dial(rabbitMQURL)
52+
if err == nil {
53+
log.Println("Connected to RabbitMQ")
54+
return conn
55+
}
56+
log.Printf("Failed to connect to RabbitMQ, retrying in 5 seconds... (Attempt %d/%d)", i+1, NUM_RETRIES)
57+
time.Sleep(5 * time.Second)
58+
}
59+
utils.FailOnError(err, fmt.Sprintf("Failed to connect to RabbitMQ after %d attempts", NUM_RETRIES))
60+
return nil
4461
}
4562

4663
func PublishSubmissionMessage(submission []byte) error {

apps/history-service/.env.example

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,8 @@
11
FIREBASE_CREDENTIAL_PATH=cs3219-staging-codehisto-bb61c-firebase-adminsdk-egopb-95cfaf9b87.json
2-
PORT=8082
2+
PORT=8082
3+
4+
# If you are NOT USING docker, use the below variables
5+
# RABBITMQ_URL=amqp://guest:guest@localhost:5672/
6+
7+
# If you are USING docker, use the below variables
8+
RABBITMQ_URL=amqp://guest:guest@rabbitmq:5672/

apps/history-service/main.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,10 @@ func main() {
3333

3434
service := &handlers.Service{Client: client}
3535

36-
amqpChannel := messagequeue.InitRabbitMQServer()
36+
amqpConnection, amqpChannel := messagequeue.InitRabbitMQServer()
37+
defer amqpConnection.Close()
3738
defer amqpChannel.Close()
38-
messagequeue.ConsumeSubmissionMessages(client, databases.CreateHistory)
39+
go messagequeue.ConsumeSubmissionMessages(client, databases.CreateHistory)
3940

4041
r := initChiRouter(service)
4142
initRestServer(r)

apps/history-service/messagequeue/rabbitmq.go

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,34 +3,34 @@ package messagequeue
33
import (
44
"context"
55
"encoding/json"
6+
"fmt"
67
"history-service/models"
78
"history-service/utils"
89
"log"
910
"os"
11+
"time"
1012

1113
"cloud.google.com/go/firestore"
1214
amqp "github.com/rabbitmq/amqp091-go"
1315
)
1416

15-
const CODE_SUBMISSION_QUEUE_KEY = "code-submission"
17+
const (
18+
CODE_SUBMISSION_QUEUE_KEY = "code-submission"
19+
NUM_RETRIES = 10
20+
)
1621

1722
var (
1823
codeSubmissionQueue amqp.Queue
1924
rabbitMQChannel *amqp.Channel
2025
)
2126

22-
func InitRabbitMQServer() *amqp.Channel {
23-
// Connect to RabbitMQ server
24-
rabbitMQURL := os.Getenv("RABBITMQ_URL")
25-
conn, err := amqp.Dial(rabbitMQURL)
26-
utils.FailOnError(err, "Failed to connect to RabbitMQ")
27-
defer conn.Close()
27+
func InitRabbitMQServer() (*amqp.Connection, *amqp.Channel) {
28+
conn := connectToRabbitMQ()
2829

2930
// Create a channel
3031
ch, err := conn.Channel()
3132
utils.FailOnError(err, "Failed to open a channel")
3233
rabbitMQChannel = ch
33-
defer ch.Close()
3434

3535
// Declare a queue
3636
q, err := ch.QueueDeclare(
@@ -44,7 +44,24 @@ func InitRabbitMQServer() *amqp.Channel {
4444
utils.FailOnError(err, "Failed to declare a queue")
4545
codeSubmissionQueue = q
4646

47-
return ch
47+
return conn, ch
48+
}
49+
50+
func connectToRabbitMQ() *amqp.Connection {
51+
var conn *amqp.Connection
52+
var err error
53+
rabbitMQURL := os.Getenv("RABBITMQ_URL")
54+
for i := 0; i < NUM_RETRIES; i++ { // Retry up to 10 times
55+
conn, err = amqp.Dial(rabbitMQURL)
56+
if err == nil {
57+
log.Println("Connected to RabbitMQ")
58+
return conn
59+
}
60+
log.Printf("Failed to connect to RabbitMQ, retrying in 5 seconds... (Attempt %d/%d)", i+1, NUM_RETRIES)
61+
time.Sleep(5 * time.Second)
62+
}
63+
utils.FailOnError(err, fmt.Sprintf("Failed to connect to RabbitMQ after %d attempts", NUM_RETRIES))
64+
return nil
4865
}
4966

5067
func ConsumeSubmissionMessages(client *firestore.Client, createSubmission func(
@@ -62,7 +79,7 @@ func ConsumeSubmissionMessages(client *firestore.Client, createSubmission func(
6279
false, // no-wait
6380
nil, // args
6481
)
65-
utils.FailOnError(err, "Failed to register a consumer")
82+
utils.FailOnError(err, "RabbitMQ: Failed to register a consumer")
6683

6784
// Create a channel to block indefinitely
6885
forever := make(chan bool)

0 commit comments

Comments
 (0)