Skip to content

Commit 6028167

Browse files
authored
Merge pull request NdoleStudio#131 from eriksson/handle_local_event_queue
Handle send message event in a local setup (dev. localhost)
2 parents 38ed55d + 36dc244 commit 6028167

2 files changed

Lines changed: 68 additions & 0 deletions

File tree

api/pkg/di/container.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,15 @@ func (container *Container) EventsQueueConfiguration() (config services.PushQueu
305305
func (container *Container) EventsQueue() (queue services.PushQueue) {
306306
container.logger.Debug("creating events services.PushQueue")
307307

308+
if isLocal() {
309+
return services.NewInMemoryPushQueue(
310+
container.Logger(),
311+
container.Tracer(),
312+
container.EventsQueueConfiguration(),
313+
func() *services.EventDispatcher { return container.eventDispatcher },
314+
)
315+
}
316+
308317
return services.NewGooglePushQueue(
309318
container.Logger(),
310319
container.Tracer(),
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package services
2+
3+
import (
4+
"context"
5+
"encoding/json"
6+
"fmt"
7+
"time"
8+
9+
"github.com/NdoleStudio/httpsms/pkg/telemetry"
10+
cloudevents "github.com/cloudevents/sdk-go/v2"
11+
"github.com/google/uuid"
12+
)
13+
14+
type inMemoryPushQueue struct {
15+
getEventDispatcher func() *EventDispatcher
16+
queueConfig PushQueueConfig
17+
logger telemetry.Logger
18+
tracer telemetry.Tracer
19+
}
20+
21+
// NewGooglePushQueue creates a new googlePushQueue
22+
func NewInMemoryPushQueue(
23+
logger telemetry.Logger,
24+
tracer telemetry.Tracer,
25+
queueConfig PushQueueConfig,
26+
getEventDispatcher func() *EventDispatcher,
27+
) PushQueue {
28+
return &inMemoryPushQueue{
29+
tracer: tracer,
30+
logger: logger,
31+
queueConfig: queueConfig,
32+
getEventDispatcher: getEventDispatcher,
33+
}
34+
}
35+
36+
// Enqueue a task to the queue
37+
func (queue *inMemoryPushQueue) Enqueue(ctx context.Context, task *PushQueueTask, timeout time.Duration) (queueID string, err error) {
38+
ctx, span := queue.tracer.Start(ctx)
39+
defer span.End()
40+
41+
ctxLogger := queue.tracer.CtxLogger(queue.logger, span)
42+
queueID = uuid.New().String()
43+
44+
go func() {
45+
time.Sleep(timeout)
46+
var event cloudevents.Event
47+
json.Unmarshal(task.Body, &event)
48+
queue.getEventDispatcher().DispatchSync(ctx, event)
49+
}()
50+
51+
ctxLogger.Info(fmt.Sprintf(
52+
"item added to [%s] queue with id [%s] and schedule [%s]",
53+
queue.queueConfig.Name,
54+
queueID,
55+
time.Now().UTC().Add(timeout),
56+
))
57+
58+
return queueID, nil
59+
}

0 commit comments

Comments
 (0)