66 lines
2.6 KiB
Markdown
66 lines
2.6 KiB
Markdown
+++
|
|
title = "Bolt Pub/Sub"
|
|
description = "A pure Go key/value store"
|
|
date = 2021-11-19T00:00:00+02:00
|
|
bref = "A pure Go key/value store"
|
|
weight = 20
|
|
+++
|
|
|
|
Bolt is a pure Go key/value store which provides a simple, fast, and reliable
|
|
database for projects that don't require a full database server such as
|
|
Postgres or MySQL.
|
|
|
|
Bolt backed Pub/Sub is good for simple applications which don't need a more
|
|
advanced Pub/Sub system with external dependencies or already use Bolt and
|
|
want to publish messages in transaction when saving other data.
|
|
|
|
Bolt documentation: https://github.com/etcd-io/bbolt
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
go get github.com/ThreeDotsLabs/watermill-bolt
|
|
```
|
|
|
|
### Characteristics
|
|
|
|
| Feature | Implements | Note |
|
|
| ------------------- | ---------- | ---- |
|
|
| ConsumerGroups | no | |
|
|
| ExactlyOnceDelivery | no | |
|
|
| GuaranteedOrder | no | |
|
|
| Persistent | yes | |
|
|
|
|
### Configuration
|
|
|
|
{{% load-snippet-partial file="src-link/watermill-bolt/pkg/bolt/bolt.go" first_line_contains="type CommonConfig struct " last_line_equals="}" %}}
|
|
|
|
{{% load-snippet-partial file="src-link/watermill-bolt/pkg/bolt/bolt.go" first_line_contains="type PublisherConfig struct " last_line_equals="}" %}}
|
|
|
|
{{% load-snippet-partial file="src-link/watermill-bolt/pkg/bolt/bolt.go" first_line_contains="type SubscriberConfig struct " last_line_equals="}" %}}
|
|
|
|
#### Subscription name
|
|
|
|
To receive messages published to a topic, you must create a subscription to
|
|
that topic. Only messages published to the topic after the subscription is
|
|
created will be received by the subscriber.
|
|
|
|
A topic can have multiple subscriptions, but a given subscription belongs to
|
|
a single topic.
|
|
|
|
In Watermill, the subscription is created automatically during calling
|
|
`Subscribe()`. Subscription name is generated by calling the function set as
|
|
`SubscriberConfig.GenerateSubscriptionName`. By default, it is the topic name
|
|
with the string `_sub` appended to it.
|
|
|
|
#### Marshaler
|
|
|
|
Watermill's messages cannot be directly saved in Bolt which operates on byte
|
|
slices. Marshaller converts the messages to and from byte slices. The default
|
|
implementation marshals messages as JSON, a format which is human-readable
|
|
for easier debugging. The performance should be enough for most applications
|
|
unless a very large messages are used within your system. If that is the case
|
|
you may want to consider implementing a more efficient marshaler.
|
|
|
|
{{% load-snippet-partial file="src-link/watermill-bolt/pkg/bolt/marshaler.go" first_line_contains="// Marshaler" last_line_equals="}" %}}
|