Delete unhandled messages from sqs (#987)

Add more log
This commit is contained in:
ftocal 2024-01-15 14:11:41 -03:00 committed by GitHub
parent e21b836455
commit 27bf188149
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 54 additions and 8 deletions

View File

@ -33,7 +33,8 @@ func NewEventSqs(consumer *sqs_client.Consumer, converter ConverterFunc, logger
consumer: consumer,
converter: converter,
chSize: 10,
logger: logger}
logger: logger.With(zap.String("queueUrl", consumer.GetQueueUrl())),
}
for _, opt := range opts {
opt(s)
}
@ -57,6 +58,7 @@ func (q *SQS) Consume(ctx context.Context) <-chan ConsumerMessage {
q.logger.Error("Error getting messages from SQS", zap.Error(err))
continue
}
q.logger.Debug("Received messages from SQS", zap.Int("count", len(messages)))
expiredAt := time.Now().Add(q.consumer.GetVisibilityTimeout())
for _, msg := range messages {
// unmarshal body to sqsEvent
@ -64,17 +66,27 @@ func (q *SQS) Consume(ctx context.Context) <-chan ConsumerMessage {
err := json.Unmarshal([]byte(*msg.Body), &sqsEvent)
if err != nil {
q.logger.Error("Error decoding message from SQS", zap.Error(err))
if err = q.consumer.DeleteMessage(ctx, msg.ReceiptHandle); err != nil {
q.logger.Error("Error deleting message from SQS", zap.Error(err))
}
continue
}
// converts message to event
event, err := q.converter(sqsEvent.Message)
if err != nil {
q.logger.Error("Error converting event message from SQSEvent", zap.Error(err))
q.logger.Error("Error converting event message", zap.Error(err))
if err = q.consumer.DeleteMessage(ctx, msg.ReceiptHandle); err != nil {
q.logger.Error("Error deleting message from SQS", zap.Error(err))
}
continue
}
if event == nil {
q.logger.Warn("Can not handle message", zap.String("body", *msg.Body))
if err = q.consumer.DeleteMessage(ctx, msg.ReceiptHandle); err != nil {
q.logger.Error("Error deleting message from SQS", zap.Error(err))
}
continue
}

View File

@ -108,3 +108,8 @@ func (c *Consumer) GetQueueAttributes(ctx context.Context) (*aws_sqs.GetQueueAtt
}
return c.api.GetQueueAttributes(ctx, params)
}
// GetQueueUrl returns queue url.
func (c *Consumer) GetQueueUrl() string {
return c.url
}

View File

@ -108,3 +108,8 @@ func (c *Consumer) GetQueueAttributes(ctx context.Context) (*aws_sqs.GetQueueAtt
}
return c.api.GetQueueAttributes(ctx, params)
}
// GetQueueUrl returns queue url.
func (c *Consumer) GetQueueUrl() string {
return c.url
}

View File

@ -40,7 +40,8 @@ func NewEventSQS(consumer *sqs.Consumer, converter ConverterFunc, filterConsume
converter: converter,
filterConsume: filterConsume,
metrics: metrics,
logger: logger}
logger: logger.With(zap.String("queueUrl", consumer.GetQueueUrl())),
}
for _, opt := range opts {
opt(s)
}
@ -64,6 +65,7 @@ func (q *SQS) Consume(ctx context.Context) <-chan ConsumerMessage {
q.logger.Error("Error getting messages from SQS", zap.Error(err))
continue
}
q.logger.Debug("Received messages from SQS", zap.Int("count", len(messages)))
expiredAt := time.Now().Add(q.consumer.GetVisibilityTimeout())
for _, msg := range messages {
@ -72,17 +74,27 @@ func (q *SQS) Consume(ctx context.Context) <-chan ConsumerMessage {
err := json.Unmarshal([]byte(*msg.Body), &sqsEvent)
if err != nil {
q.logger.Error("Error decoding message from SQS", zap.Error(err))
if err = q.consumer.DeleteMessage(ctx, msg.ReceiptHandle); err != nil {
q.logger.Error("Error deleting message from SQS", zap.Error(err))
}
continue
}
// unmarshal message to event
event, err := q.converter(sqsEvent.Message)
if err != nil {
q.logger.Error("Error decoding event message from SQSEvent", zap.Error(err))
q.logger.Error("Error converting event message", zap.Error(err))
if err = q.consumer.DeleteMessage(ctx, msg.ReceiptHandle); err != nil {
q.logger.Error("Error deleting message from SQS", zap.Error(err))
}
continue
}
if event == nil {
q.logger.Warn("Can not handle message", zap.String("body", *msg.Body))
if err = q.consumer.DeleteMessage(ctx, msg.ReceiptHandle); err != nil {
q.logger.Error("Error deleting message from SQS", zap.Error(err))
}
continue
}

View File

@ -117,7 +117,7 @@ func (c *Consumer) processSourceTx(ctx context.Context, msg queue.ConsumerMessag
)
} else if errors.Is(err, ErrAlreadyProcessed) {
msg.Done()
c.logger.Warn("Message already processed - skipping",
c.logger.Warn("Origin message already processed - skipping",
zap.String("trackId", event.TrackID),
zap.String("vaaId", event.ID),
elapsedLog,

View File

@ -121,7 +121,7 @@ func NewNotificationEvent(log *zap.Logger) ConverterFunc {
}
address, err := sdk.StringToAddress(tr.Attributes.EmitterAddress)
if err != nil {
return nil, fmt.Errorf("error converting emitter address: %w", err)
return nil, fmt.Errorf("error converting emitter address [%s]: %w", tr.Attributes.EmitterAddress, err)
}
vaa := sdk.VAA{
EmitterChain: sdk.ChainID(tr.Attributes.EmitterChain),

View File

@ -39,7 +39,8 @@ func NewEventSqs(consumer *sqs_client.Consumer, converter ConverterFunc, metrics
chSize: 10,
metrics: metrics,
converter: converter,
logger: logger}
logger: logger.With(zap.String("queueUrl", consumer.GetQueueUrl())),
}
for _, opt := range opts {
opt(s)
}
@ -63,6 +64,7 @@ func (q *SQS) Consume(ctx context.Context) <-chan ConsumerMessage {
q.logger.Error("Error getting messages from SQS", zap.Error(err))
continue
}
q.logger.Debug("Received messages from SQS", zap.Int("count", len(messages)))
expiredAt := time.Now().Add(q.consumer.GetVisibilityTimeout())
for _, msg := range messages {
// unmarshal body to sqsEvent
@ -70,16 +72,26 @@ func (q *SQS) Consume(ctx context.Context) <-chan ConsumerMessage {
err := json.Unmarshal([]byte(*msg.Body), &sqsEvent)
if err != nil {
q.logger.Error("Error decoding message from SQS", zap.Error(err))
if err = q.consumer.DeleteMessage(ctx, msg.ReceiptHandle); err != nil {
q.logger.Error("Error deleting message from SQS", zap.Error(err))
}
continue
}
// unmarshal message to event
event, err := q.converter(sqsEvent.Message)
if err != nil {
q.logger.Error("Error decoding vaaEvent message from SQSEvent", zap.Error(err))
q.logger.Error("Error converting event message", zap.Error(err))
if err = q.consumer.DeleteMessage(ctx, msg.ReceiptHandle); err != nil {
q.logger.Error("Error deleting message from SQS", zap.Error(err))
}
continue
}
if event == nil {
q.logger.Warn("Can not handle message", zap.String("body", *msg.Body))
if err = q.consumer.DeleteMessage(ctx, msg.ReceiptHandle); err != nil {
q.logger.Error("Error deleting message from SQS", zap.Error(err))
}
continue
}
q.metrics.IncVaaConsumedQueue(uint16(event.ChainID))