Skip to content

Commit c69e116

Browse files
committed
Add SQS Examples
Signed-off-by: Yann Vigara <[email protected]>
1 parent d149732 commit c69e116

File tree

4 files changed

+232
-0
lines changed

4 files changed

+232
-0
lines changed

samples/sqs/go.mod

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
module github.com/cloudevents/sdk-go/samples/sqs
2+
3+
go 1.23.0
4+
5+
toolchain go1.23.8
6+
7+
require (
8+
github.com/aws/aws-sdk-go-v2/config v1.31.0
9+
github.com/cloudevents/sdk-go/protocol/sqs/v2 v2.0.0-00010101000000-000000000000
10+
github.com/cloudevents/sdk-go/v2 v2.16.1
11+
github.com/google/uuid v1.6.0
12+
github.com/kelseyhightower/envconfig v1.4.0
13+
)
14+
15+
require (
16+
github.com/aws/aws-sdk-go-v2 v1.38.0 // indirect
17+
github.com/aws/aws-sdk-go-v2/credentials v1.18.4 // indirect
18+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.3 // indirect
19+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.3 // indirect
20+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.3 // indirect
21+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect
22+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.0 // indirect
23+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.3 // indirect
24+
github.com/aws/aws-sdk-go-v2/service/sqs v1.41.0 // indirect
25+
github.com/aws/aws-sdk-go-v2/service/sso v1.28.0 // indirect
26+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.33.0 // indirect
27+
github.com/aws/aws-sdk-go-v2/service/sts v1.37.0 // indirect
28+
github.com/aws/smithy-go v1.22.5 // indirect
29+
github.com/json-iterator/go v1.1.12 // indirect
30+
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
31+
github.com/modern-go/reflect2 v1.0.2 // indirect
32+
go.uber.org/multierr v1.11.0 // indirect
33+
go.uber.org/zap v1.27.0 // indirect
34+
)
35+
36+
replace github.com/cloudevents/sdk-go/v2 => ../../v2
37+
38+
replace github.com/cloudevents/sdk-go/protocol/sqs/v2 => ../../protocol/sqs/v2

samples/sqs/go.sum

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
github.com/aws/aws-sdk-go-v2 v1.38.0 h1:UCRQ5mlqcFk9HJDIqENSLR3wiG1VTWlyUfLDEvY7RxU=
2+
github.com/aws/aws-sdk-go-v2 v1.38.0/go.mod h1:9Q0OoGQoboYIAJyslFyF1f5K1Ryddop8gqMhWx/n4Wg=
3+
github.com/aws/aws-sdk-go-v2/config v1.31.0 h1:9yH0xiY5fUnVNLRWO0AtayqwU1ndriZdN78LlhruJR4=
4+
github.com/aws/aws-sdk-go-v2/config v1.31.0/go.mod h1:VeV3K72nXnhbe4EuxxhzsDc/ByrCSlZwUnWH52Nde/I=
5+
github.com/aws/aws-sdk-go-v2/credentials v1.18.4 h1:IPd0Algf1b+Qy9BcDp0sCUcIWdCQPSzDoMK3a8pcbUM=
6+
github.com/aws/aws-sdk-go-v2/credentials v1.18.4/go.mod h1:nwg78FjH2qvsRM1EVZlX9WuGUJOL5od+0qvm0adEzHk=
7+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.3 h1:GicIdnekoJsjq9wqnvyi2elW6CGMSYKhdozE7/Svh78=
8+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.3/go.mod h1:R7BIi6WNC5mc1kfRM7XM/VHC3uRWkjc396sfabq4iOo=
9+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.3 h1:o9RnO+YZ4X+kt5Z7Nvcishlz0nksIt2PIzDglLMP0vA=
10+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.3/go.mod h1:+6aLJzOG1fvMOyzIySYjOFjcguGvVRL68R+uoRencN4=
11+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.3 h1:joyyUFhiTQQmVK6ImzNU9TQSNRNeD9kOklqTzyk5v6s=
12+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.3/go.mod h1:+vNIyZQP3b3B1tSLI0lxvrU9cfM7gpdRXMFfm67ZcPc=
13+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d2KyU5X/BZxjOkRo=
14+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3/go.mod h1:H5O/EsxDWyU+LP/V8i5sm8cxoZgc2fdNR9bxlOFrQTo=
15+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.0 h1:6+lZi2JeGKtCraAj1rpoZfKqnQ9SptseRZioejfUOLM=
16+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.0/go.mod h1:eb3gfbVIxIoGgJsi9pGne19dhCBpK6opTYpQqAmdy44=
17+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.3 h1:ieRzyHXypu5ByllM7Sp4hC5f/1Fy5wqxqY0yB85hC7s=
18+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.3/go.mod h1:O5ROz8jHiOAKAwx179v+7sHMhfobFVi6nZt8DEyiYoM=
19+
github.com/aws/aws-sdk-go-v2/service/sqs v1.41.0 h1:xobvQ4NxlXFUNgVwE6cnMI/ww7K7jtQMWKor2Gi61Xg=
20+
github.com/aws/aws-sdk-go-v2/service/sqs v1.41.0/go.mod h1:RExz4LhRKY5iogQ1dz7KVa3JyBY0PBotXovrDj850Sc=
21+
github.com/aws/aws-sdk-go-v2/service/sso v1.28.0 h1:Mc/MKBf2m4VynyJkABoVEN+QzkfLqGj0aiJuEe7cMeM=
22+
github.com/aws/aws-sdk-go-v2/service/sso v1.28.0/go.mod h1:iS5OmxEcN4QIPXARGhavH7S8kETNL11kym6jhoS7IUQ=
23+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.33.0 h1:6csaS/aJmqZQbKhi1EyEMM7yBW653Wy/B9hnBofW+sw=
24+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.33.0/go.mod h1:59qHWaY5B+Rs7HGTuVGaC32m0rdpQ68N8QCN3khYiqs=
25+
github.com/aws/aws-sdk-go-v2/service/sts v1.37.0 h1:MG9VFW43M4A8BYeAfaJJZWrroinxeTi2r3+SnmLQfSA=
26+
github.com/aws/aws-sdk-go-v2/service/sts v1.37.0/go.mod h1:JdeBDPgpJfuS6rU/hNglmOigKhyEZtBmbraLE4GK1J8=
27+
github.com/aws/smithy-go v1.22.5 h1:P9ATCXPMb2mPjYBgueqJNCA5S9UfktsW0tTxi+a7eqw=
28+
github.com/aws/smithy-go v1.22.5/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI=
29+
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
30+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
31+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
32+
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
33+
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
34+
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
35+
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
36+
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
37+
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
38+
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
39+
github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dvMUtDTo2cv8=
40+
github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg=
41+
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
42+
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
43+
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
44+
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
45+
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
46+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
47+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
48+
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
49+
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
50+
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
51+
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
52+
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
53+
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
54+
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
55+
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
56+
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
57+
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
58+
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
59+
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
60+
golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE=
61+
golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
62+
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
63+
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

samples/sqs/receiver/main.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/*
2+
Copyright 2023 The CloudEvents Authors
3+
SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package main
7+
8+
import (
9+
"context"
10+
"fmt"
11+
"log"
12+
13+
awsconfig "github.com/aws/aws-sdk-go-v2/config"
14+
"github.com/cloudevents/sdk-go/protocol/sqs/v2"
15+
cloudevents "github.com/cloudevents/sdk-go/v2"
16+
"github.com/kelseyhightower/envconfig"
17+
)
18+
19+
type envConfig struct {
20+
QueueURL string `envconfig:"AWS_SQS_QUEUE_URL" required:"true"`
21+
}
22+
23+
func main() {
24+
var env envConfig
25+
if err := envconfig.Process("", &env); err != nil {
26+
log.Fatalf("[ERROR] Failed to process env var: %s", err)
27+
}
28+
ctx := context.Background()
29+
awsCfg, err := awsconfig.LoadDefaultConfig(ctx)
30+
if err != nil {
31+
log.Fatalf("failed to load AWS SDK configuration: %s", err.Error())
32+
}
33+
34+
// set a default topic with test-topic1
35+
p, err := sqs.New(env.QueueURL, sqs.WithNewClientFromConfig(awsCfg))
36+
if err != nil {
37+
log.Fatalf("failed to create protocol: %v", err)
38+
}
39+
40+
c, err := cloudevents.NewClient(p)
41+
if err != nil {
42+
log.Fatalf("failed to create client, %v", err)
43+
}
44+
45+
log.Printf("receiver start consuming messages from test-topic\n")
46+
err = c.StartReceiver(ctx, receive)
47+
if err != nil {
48+
log.Fatalf("failed to start receiver: %s", err)
49+
} else {
50+
log.Printf("receiver stopped\n")
51+
}
52+
}
53+
54+
func receive(ctx context.Context, event cloudevents.Event) {
55+
fmt.Printf("%s", event)
56+
}

samples/sqs/sender/main.go

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
/*
2+
Copyright 2023 The CloudEvents Authors
3+
SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package main
7+
8+
import (
9+
"context"
10+
"log"
11+
"time"
12+
13+
cloudevents "github.com/cloudevents/sdk-go/v2"
14+
"github.com/google/uuid"
15+
16+
awsconfig "github.com/aws/aws-sdk-go-v2/config"
17+
"github.com/cloudevents/sdk-go/protocol/sqs/v2"
18+
"github.com/kelseyhightower/envconfig"
19+
)
20+
21+
const (
22+
count = 10
23+
)
24+
25+
type envConfig struct {
26+
QueueURL string `envconfig:"AWS_SQS_QUEUE_URL" required:"true"`
27+
}
28+
29+
func main() {
30+
var env envConfig
31+
if err := envconfig.Process("", &env); err != nil {
32+
log.Fatalf("[ERROR] Failed to process env var: %s", err)
33+
}
34+
ctx := context.Background()
35+
awsCfg, err := awsconfig.LoadDefaultConfig(ctx)
36+
if err != nil {
37+
log.Fatalf("failed to load AWS SDK configuration: %s", err.Error())
38+
}
39+
40+
// set a default topic with test-topic1
41+
p, err := sqs.New(env.QueueURL, sqs.WithNewClientFromConfig(awsCfg))
42+
if err != nil {
43+
log.Fatalf("failed to create protocol: %v", err)
44+
}
45+
46+
c, err := cloudevents.NewClient(p, cloudevents.WithTimeNow(), cloudevents.WithUUIDs())
47+
if err != nil {
48+
log.Fatalf("failed to create client, %v", err)
49+
}
50+
51+
for i := 0; i < count; i++ {
52+
e := cloudevents.NewEvent()
53+
e.SetID(uuid.New().String())
54+
e.SetType("com.cloudevents.sample.sent")
55+
e.SetSource("https://github.com/cloudevents/sdk-go/samples/sqs/sender")
56+
err = e.SetData(cloudevents.ApplicationJSON, map[string]interface{}{
57+
"id": i,
58+
"message": "Hello, World!",
59+
})
60+
if err != nil {
61+
log.Printf("failed to set data: %v", err)
62+
}
63+
if result := c.Send(
64+
ctx,
65+
// binding.WithForceStructured(ctx),
66+
// binding.WithForceBinary(ctx),
67+
e,
68+
); cloudevents.IsUndelivered(result) {
69+
log.Printf("failed to send: %v", result)
70+
} else {
71+
log.Printf("sent: %d, accepted: %t", i, cloudevents.IsACK(result))
72+
}
73+
time.Sleep(1 * time.Second)
74+
}
75+
}

0 commit comments

Comments
 (0)