Skip to content

Go SDK

The Go SDK provides publisher and consumer packages for interacting with SlackMQ.

Installation

go get github.com/garysassano/slackmq

Publishing

package main

import (
    "context"
    "fmt"
    "log"
    "os"

    "github.com/garysassano/slackmq/pkg/publisher"
    "github.com/slack-go/slack"
)

func main() {
    client := slack.New(os.Getenv("SLACK_BOT_TOKEN"))
    pub, err := publisher.NewPublisher(client, os.Getenv("SMQ_TOPIC_CHANNEL"))
    if err != nil {
        log.Fatal(err)
    }

    ts, err := pub.Publish(context.Background(), "Order ORD-9042 confirmed")
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("Published: ts=%s topic=%s\n", ts, pub.TopicID())
}

Consuming

package main

import (
    "context"
    "fmt"
    "log"
    "os"
    "os/signal"
    "syscall"

    "github.com/garysassano/slackmq/pkg/consumer"
    "github.com/slack-go/slack"
)

func main() {
    client := slack.New(os.Getenv("SLACK_BOT_TOKEN"))
    cons, err := consumer.NewConsumer(client, os.Getenv("SMQ_QUEUE_CHANNEL"))
    if err != nil {
        log.Fatal(err)
    }

    ctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
    defer cancel()

    err = cons.Consume(ctx, func(ctx context.Context, d *consumer.Delivery) error {
        fmt.Printf("Received: %s (attempt %d)\n", d.Text, d.Attempt)
        return d.Ack(ctx)
    })
    if err != nil && err != context.Canceled {
        log.Fatal(err)
    }
}

Key Types

Publisher

  • NewPublisher(client *slack.Client, channel string) (*Publisher, error) — create a publisher for a topic channel
  • Publish(ctx context.Context, text string) (string, error) — post a message, returns the Slack timestamp
  • TopicID() string — returns the resolved channel ID

Consumer

  • NewConsumer(client *slack.Client, channel string) (*Consumer, error) — create a consumer for a queue channel
  • Consume(ctx context.Context, handler func(ctx, *Delivery) error) error — start consuming messages
  • QueueID() string — returns the resolved channel ID

Delivery

  • Text string — the message content
  • Attempt int — current delivery attempt number
  • TopicChannel string — the originating topic channel
  • Ack(ctx context.Context) error — acknowledge successful processing
  • Nack(ctx context.Context) error — signal processing failure