Go - Topic.Publish()

Publish an event (push based message) to a topic.

import (
"context"
"fmt"
"github.com/nitrictech/go-sdk/api/events"
"github.com/nitrictech/go-sdk/nitric"
)
func main() {
updates, err := nitric.NewTopic("updates").With(nitric.TopicPublishing)
if err != nil {
fmt.Println(err)
return
}
updates.Publish(context.TODO(), &events.Event{
Payload: map[string]interface{}{
"something": "amazing happened",
},
})
nitric.Run()
}

Parameters

  • Name
    ctx
    Required
    Required
    Type
    context
    Description

    The context of the call, used for tracing.

  • Name
    event
    Required
    Required
    Type
    Event
    Description

    The event to publish to the topic.

    • Name
      ID
      Optional
      Optional
      Type
      string
      Description

      Unique ID to apply to the event.

    • Name
      Payload
      Required
      Required
      Type
      map[string]interface{}
      Description

      Payload to send with the event.

    • Name
      PayloadType
      Optional
      Optional
      Type
      string
      Description

      A hint to the type of payload supplied.

  • Name
    opts
    Optional
    Optional
    Type
    PublishOption
    Description

    Optional function to send a message with a delay.

Examples

Publish a message

Publishing messages to a topic will push a copy of the message to each of the topic's subscribers. By default, delivery occurs without a delay.

import (
"context"
"fmt"
"github.com/nitrictech/go-sdk/api/events"
"github.com/nitrictech/go-sdk/nitric"
)
func main() {
updates, err := nitric.NewTopic("updates").With(nitric.TopicPublishing)
if err != nil {
fmt.Println(err)
return
}
err := updates.Publish(context.TODO(), &events.Event{
Payload: map[string]interface{}{
"something": "amazing happened",
},
})
nitric.Run()
}

Delaying message delivery

You can delay the delivery of messages sent to a topic. The current maximum delay is 7 days (604800 seconds).

import (
"context"
"fmt"
"time"
"github.com/nitrictech/go-sdk/api/events"
"github.com/nitrictech/go-sdk/nitric"
)
func main() {
updates, err := nitric.NewTopic("updates").With(nitric.TopicPublishing)
if err != nil {
fmt.Println(err)
return
}
updates.Publish(context.TODO(), &events.Event{
Payload: map[string]interface{}{
"something": "amazing happened",
},
}, events.WithDelay(time.Hour))
nitric.Run()
}

Notes

  • If an id is not supplied with an event a UUID(v4) will be generated for you.
  • A function may subscribe to OR publish to a topic but not both.
Last updated on Dec 5, 2024