gocloud.dev: gocloud.dev/pubsub/mempubsub Index | Examples | Files

package mempubsub

import "gocloud.dev/pubsub/mempubsub"

Package mempubsub provides an in-memory pubsub implementation. Use NewTopic to construct a *pubsub.Topic, and/or NewSubscription to construct a *pubsub.Subscription.

mempubsub should not be used for production: it is intended for local development and testing.

URLs

For pubsub.OpenTopic and pubsub.OpenSubscription, mempubsub registers for the scheme "mem". To customize the URL opener, or for more details on the URL format, see URLOpener. See https://gocloud.dev/concepts/urls/ for background information.

Message Delivery Semantics

mempubsub supports at-least-once semantics; applications must call Message.Ack after processing a message, or it will be redelivered. See https://godoc.org/gocloud.dev/pubsub#hdr-At_most_once_and_At_least_once_Delivery for more background.

As

mempubsub does not support any types for As.

Code:

// This example is used in https://gocloud.dev/howto/pubsub/subscribe/#mem

// import _ "gocloud.dev/pubsub/mempubsub"

// Variables set up elsewhere:
ctx := context.Background()

// Create a topic.
topic, err := pubsub.OpenTopic(ctx, "mem://topicA")
if err != nil {
    log.Fatal(err)
}
defer topic.Shutdown(ctx)

// Create a subscription connected to that topic.
subscription, err := pubsub.OpenSubscription(ctx, "mem://topicA")
if err != nil {
    log.Fatal(err)
}
defer subscription.Shutdown(ctx)

Code:

// This example is used in https://gocloud.dev/howto/pubsub/publish/#mem

// import _ "gocloud.dev/pubsub/mempubsub"

// Variables set up elsewhere:
ctx := context.Background()

topic, err := pubsub.OpenTopic(ctx, "mem://topicA")
if err != nil {
    log.Fatal(err)
}
defer topic.Shutdown(ctx)

Index

Examples

Package Files

mem.go

Constants

const Scheme = "mem"

Scheme is the URL scheme mempubsub registers its URLOpeners under on pubsub.DefaultMux.

func NewSubscription Uses

func NewSubscription(pstopic *pubsub.Topic, ackDeadline time.Duration) *pubsub.Subscription

NewSubscription creates a new subscription for the given topic. It panics if the given topic did not come from mempubsub. If a message is not acked within in the given ack deadline from when it is received, then it will be redelivered.

Code:

// This example is used in https://gocloud.dev/howto/pubsub/subscribe/#mem-ctor

// Variables set up elsewhere:
ctx := context.Background()

// Construct a *pubsub.Topic.
topic := mempubsub.NewTopic()
defer topic.Shutdown(ctx)

// Construct a *pubsub.Subscription for the topic.
subscription := mempubsub.NewSubscription(topic, 1*time.Minute /* ack deadline */)
defer subscription.Shutdown(ctx)

func NewTopic Uses

func NewTopic() *pubsub.Topic

NewTopic creates a new in-memory topic.

Code:

// This example is used in https://gocloud.dev/howto/pubsub/publish/#mem-ctor

// Variables set up elsewhere:
ctx := context.Background()

topic := mempubsub.NewTopic()
defer topic.Shutdown(ctx)

type URLOpener Uses

type URLOpener struct {
    // contains filtered or unexported fields
}

URLOpener opens mempubsub URLs like "mem://topic".

The URL's host+path is used as the topic to create or subscribe to.

Query parameters:

- ackdeadline: The ack deadline for OpenSubscription, in time.ParseDuration formats.
    Defaults to 1m.

func (*URLOpener) OpenSubscriptionURL Uses

func (o *URLOpener) OpenSubscriptionURL(ctx context.Context, u *url.URL) (*pubsub.Subscription, error)

OpenSubscriptionURL opens a pubsub.Subscription based on u.

func (*URLOpener) OpenTopicURL Uses

func (o *URLOpener) OpenTopicURL(ctx context.Context, u *url.URL) (*pubsub.Topic, error)

OpenTopicURL opens a pubsub.Topic based on u.

Package mempubsub imports 10 packages (graph) and is imported by 2 packages. Updated 2019-05-20. Refresh now. Tools for package owners.