From e8ef7b11331ace29d79cac2f3b1a071d9e07e960 Mon Sep 17 00:00:00 2001
From: Jan Semmelink <jan@uafrica.com>
Date: Thu, 14 Oct 2021 12:33:18 +0200
Subject: [PATCH] Define producer for SQS consumer so it can also queue new
 events from event handlers

---
 queues/sqs/consumer.go | 4 ++++
 service/service.go     | 2 ++
 2 files changed, 6 insertions(+)

diff --git a/queues/sqs/consumer.go b/queues/sqs/consumer.go
index 7c56f8f..f41b504 100644
--- a/queues/sqs/consumer.go
+++ b/queues/sqs/consumer.go
@@ -80,6 +80,10 @@ func (consumer consumer) WithAuditor(auditor audit.Auditor) queues.Consumer {
 }
 
 func (consumer consumer) Run() {
+	//create producer so event handler can queue new events (e.g. retries...)
+	consumer.Debugf("Using SQS queue producer for async events ...")
+	consumer.Service = consumer.Service.WithProducer(NewProducer(consumer.requestIDHeaderKey))
+
 	lambda.Start(consumer.Handler)
 }
 
diff --git a/service/service.go b/service/service.go
index 92e45a2..6cdbe9e 100644
--- a/service/service.go
+++ b/service/service.go
@@ -27,6 +27,7 @@ func New() Service {
 		env = "dev"
 	}
 	return service{
+		Producer:       nil,
 		Logger:         logger.New().WithFields(map[string]interface{}{"env": env}),
 		IErrorReporter: DoNotReportErrors{},
 		Auditor:        audit.None(),
@@ -78,6 +79,7 @@ func (s service) WithStarter(name string, starter IStarter) Service {
 func (s service) WithProducer(producer Producer) Service {
 	if producer != nil {
 		s.Producer = producer
+		s.Infof("Producer = (%T)%v", producer, producer)
 	}
 	return s
 }
-- 
GitLab