@@ -30,9 +30,13 @@ import (
3030 "sync/atomic"
3131 "time"
3232
33- "cloud.google.com/go/pubsub" //nolint:staticcheck // https://github.com/6RiverSystems/mmmbbb/issues/521
33+ "cloud.google.com/go/pubsub/v2"
34+ "cloud.google.com/go/pubsub/v2/apiv1/pubsubpb"
3435 "github.com/google/uuid"
3536 "golang.org/x/sync/errgroup"
37+ "google.golang.org/protobuf/types/known/durationpb"
38+
39+ "go.6river.tech/mmmbbb/internal"
3640)
3741
3842func main () {
@@ -46,33 +50,46 @@ func main() {
4650 psc , err := pubsub .NewClient (ctx , projectID )
4751 panicIf (err )
4852 uniq := uuid .NewString ()
49- primaryID := "go-deadletter-primary-" + uniq
50- deadletterID := "go-deadletter-dead-" + uniq
51- primaryTopic , err := psc .CreateTopic (ctx , primaryID )
53+ tac := psc .TopicAdminClient
54+ primaryTopicMeta , err := tac .CreateTopic (ctx , & pubsubpb.Topic {
55+ Name : internal .PSTopicName (projectID , "go-deadletter-primary-" + uniq ),
56+ })
5257 panicIf (err )
53- defer func () { panicIf (primaryTopic .Delete (ctx )) }()
54- deadletterTopic , err := psc .CreateTopic (ctx , deadletterID )
58+ defer func () { panicIf (tac .DeleteTopic (ctx , & pubsubpb.DeleteTopicRequest {Topic : primaryTopicMeta .Name })) }()
59+ deadletterTopicMeta , err := tac .CreateTopic (ctx , & pubsubpb.Topic {
60+ Name : internal .PSTopicName (projectID , "go-deadletter-dead-" + uniq ),
61+ })
5562 panicIf (err )
56- defer func () { panicIf (deadletterTopic . Delete (ctx )) }()
63+ defer func () { panicIf (tac . DeleteTopic (ctx , & pubsubpb. DeleteTopicRequest { Topic : deadletterTopicMeta . Name } )) }()
5764
58- primarySub , err := psc .CreateSubscription (ctx , primaryID , pubsub.SubscriptionConfig {
59- Topic : primaryTopic ,
60- RetryPolicy : & pubsub.RetryPolicy {
61- MinimumBackoff : time .Second * 3 / 2 ,
65+ sac := psc .SubscriptionAdminClient
66+ primarySubMeta , err := sac .CreateSubscription (ctx , & pubsubpb.Subscription {
67+ Name : internal .PSSubName (projectID , "go-deadletter-primary-" + uniq ),
68+ Topic : primaryTopicMeta .Name ,
69+ RetryPolicy : & pubsubpb.RetryPolicy {
70+ MinimumBackoff : durationpb .New (time .Second * 3 / 2 ),
6271 },
63- DeadLetterPolicy : & pubsub .DeadLetterPolicy {
64- DeadLetterTopic : deadletterTopic .String (),
72+ DeadLetterPolicy : & pubsubpb .DeadLetterPolicy {
73+ DeadLetterTopic : deadletterTopicMeta .String (),
6574 // 5 is the minimum google allows, mmmbbb permits as low as 1
6675 MaxDeliveryAttempts : 5 ,
6776 },
6877 })
6978 panicIf (err )
70- defer func () { panicIf (primarySub .Delete (ctx )) }()
71- deadletterSub , err := psc .CreateSubscription (ctx , deadletterID , pubsub.SubscriptionConfig {
72- Topic : deadletterTopic ,
79+ defer func () {
80+ panicIf (sac .DeleteSubscription (ctx , & pubsubpb.DeleteSubscriptionRequest {Subscription : primarySubMeta .Name }))
81+ }()
82+ deadletterSubMeta , err := sac .CreateSubscription (ctx , & pubsubpb.Subscription {
83+ Name : internal .PSSubName (projectID , "go-deadletter-dead-" + uniq ),
84+ Topic : deadletterTopicMeta .Name ,
7385 })
7486 panicIf (err )
75- defer func () { panicIf (deadletterSub .Delete (ctx )) }()
87+ defer func () {
88+ panicIf (sac .DeleteSubscription (ctx , & pubsubpb.DeleteSubscriptionRequest {Subscription : deadletterSubMeta .Name }))
89+ }()
90+ primaryPublisher := psc .Publisher (primaryTopicMeta .Name )
91+ primarySub := psc .Subscriber (primarySubMeta .Name )
92+ deadletterSub := psc .Subscriber (deadletterSubMeta .Name )
7693 primarySub .ReceiveSettings .MaxOutstandingMessages = 20
7794 deadletterSub .ReceiveSettings .MaxOutstandingMessages = 20
7895
@@ -126,7 +143,7 @@ func main() {
126143 case <- egCtx .Done ():
127144 fmt .Printf ("canceled after queueing %d messages\n " , i )
128145 return egCtx .Err ()
129- case pubs <- primaryTopic .Publish (egCtx , & pubsub.Message {
146+ case pubs <- primaryPublisher .Publish (egCtx , & pubsub.Message {
130147 Data : payload ,
131148 Attributes : map [string ]string {
132149 "i" : strconv .Itoa (i ),
0 commit comments