Documentation ¶
Overview ¶
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.
Example (OpenSubscriptionFromURL) ¶
package main import ( "context" "log" "gocloud.dev/pubsub" ) func main() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/pubsub/mempubsub" // PRAGMA: On gocloud.dev, hide lines until the next blank line. 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) }
Output:
Example (OpenTopicFromURL) ¶
package main import ( "context" "log" "gocloud.dev/pubsub" ) func main() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/pubsub/mempubsub" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() topic, err := pubsub.OpenTopic(ctx, "mem://topicA") if err != nil { log.Fatal(err) } defer topic.Shutdown(ctx) }
Output:
Index ¶
- Constants
- func NewSubscription(pstopic *pubsub.Topic, ackDeadline time.Duration) *pubsub.Subscription
- func NewSubscriptionWithOptions(pstopic *pubsub.Topic, ackDeadline time.Duration, opts *SubscriptionOptions) *pubsub.Subscription
- func NewTopic() *pubsub.Topic
- func NewTopicWithOptions(opts *TopicOptions) *pubsub.Topic
- type SubscriptionOptions
- type TopicOptions
- type URLOpener
Examples ¶
Constants ¶
const Scheme = "mem"
Scheme is the URL scheme mempubsub registers its URLOpeners under on pubsub.DefaultMux.
Variables ¶
This section is empty.
Functions ¶
func NewSubscription ¶
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.
Example ¶
package main import ( "context" "time" "gocloud.dev/pubsub/mempubsub" ) func main() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. 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) }
Output:
func NewSubscriptionWithOptions ¶ added in v0.28.0
func NewSubscriptionWithOptions(pstopic *pubsub.Topic, ackDeadline time.Duration, opts *SubscriptionOptions) *pubsub.Subscription
NewSubscriptionWithOptions is similar to NewSubscription, but supports SubscriptionOptions.
func NewTopic ¶
NewTopic creates a new in-memory topic.
Example ¶
package main import ( "context" "gocloud.dev/pubsub/mempubsub" ) func main() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() topic := mempubsub.NewTopic() defer topic.Shutdown(ctx) }
Output:
func NewTopicWithOptions ¶ added in v0.28.0
func NewTopicWithOptions(opts *TopicOptions) *pubsub.Topic
NewTopicWithOptions is similar to NewTopic, but supports TopicOptions.
Types ¶
type SubscriptionOptions ¶ added in v0.28.0
type SubscriptionOptions struct { // ReceiveBatcherOptions adds constraints to the default batching done for receives. ReceiveBatcherOptions batcher.Options // AckBatcherOptions adds constraints to the default batching done for acks. AckBatcherOptions batcher.Options }
SubscriptionOptions will contain configuration for subscriptions.
type TopicOptions ¶ added in v0.28.0
type TopicOptions struct { // BatcherOptions adds constraints to the default batching done for sends. BatcherOptions batcher.Options }
TopicOptions contains configuration options for topics.
type URLOpener ¶ added in v0.12.0
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 ¶ added in v0.12.0
func (o *URLOpener) OpenSubscriptionURL(ctx context.Context, u *url.URL) (*pubsub.Subscription, error)
OpenSubscriptionURL opens a pubsub.Subscription based on u.