Skip to content

Commit b5d5017

Browse files
committed
handle notifyClose
1 parent 0edec90 commit b5d5017

1 file changed

Lines changed: 29 additions & 12 deletions

File tree

datafeed/mq.go

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ const (
1717
mqConsumerConcurrency = 1
1818
)
1919

20+
const (
21+
consumerRetries = 10
22+
)
23+
2024
// MQService
2125
type MQService struct {
2226
logger hclog.Logger
@@ -61,6 +65,21 @@ func newMQService(logger hclog.Logger, config *MQConfig, datafeedService *DataFe
6165
return mq, nil
6266
}
6367

68+
func (mq *MQService) restartWithRetries(ctx context.Context) (<-chan *proto.DataFeedReport, <-chan error, error) {
69+
for i := 0; i < consumerRetries; i++ {
70+
mq.logger.Debug("Restarting consumer with try", i)
71+
time.Sleep(5 * time.Second)
72+
reports, errors, err := mq.startConsumer(ctx, mqConsumerConcurrency)
73+
if err == nil {
74+
return reports, errors, err
75+
}
76+
}
77+
78+
erroMsg := fmt.Sprintf("failed to restart consumer after %d retries", consumerRetries)
79+
mq.logger.Error(erroMsg)
80+
return nil, nil, fmt.Errorf(erroMsg)
81+
}
82+
6483
// startConsumeLoop
6584
func (mq *MQService) startConsumeLoop() {
6685
mq.logger.Debug("listening for MQ messages...")
@@ -80,20 +99,10 @@ func (mq *MQService) startConsumeLoop() {
8099
mq.datafeedService.queueReportingTx(ProposeOutcome, report.MarketHash, report.Outcome)
81100
case err = <-errors:
82101
mq.logger.Error("error while consuming from message queue", "err", err)
83-
mq.logger.Debug("Restarting consumer...")
84-
time.Sleep(2 * time.Second)
85-
reports, errors, err = mq.startConsumer(ctx, mqConsumerConcurrency)
86-
if err != nil {
87-
mq.logger.Error("Got Error during consumer restart", err)
88-
}
102+
reports, errors, _ = mq.restartWithRetries(ctx)
89103
case <-common.GetTerminationSignalCh():
90104
mq.logger.Debug("got sigterm, shuttown down mq consumer")
91-
mq.logger.Debug("Restarting consumer...")
92-
time.Sleep(2 * time.Second)
93-
reports, errors, err = mq.startConsumer(ctx, mqConsumerConcurrency)
94-
if err != nil {
95-
mq.logger.Error("Got Error during consumer restart", err)
96-
}
105+
reports, errors, _ = mq.restartWithRetries(ctx)
97106

98107
}
99108
}
@@ -175,6 +184,14 @@ func (mq *MQService) startConsumer(
175184
}()
176185
}
177186

187+
go func() {
188+
notifyCloseError := <-mq.connection.Channel.NotifyClose(make(chan *amqp.Error))
189+
if notifyCloseError != nil {
190+
mq.logger.Debug("Got notifyCloseError error")
191+
errors <- fmt.Errorf("Connection closed: %v", notifyCloseError)
192+
}
193+
}()
194+
178195
// stop the consumer upon sigterm
179196
go func() {
180197
<-ctx.Done()

0 commit comments

Comments
 (0)