go-pubsub
Provide pubsub server and simple stats monitoring, available both by REST API.
You can select the background datastore of pubsub server one out of in the in-memory
, mysql
and redis
.
If you need pubsub client library, import client
packages. Currently available client library is Go
only.
Installation
go get -u github.com/takashabe/go-pubsub/cmd/pubsub
Usage
Start server
make build # need once at first
cmd/pubsub/pubsub
Options:
- file: Config file. require anything config file. (default "config/app.yaml")
- port: Running port. require unused port. (default 8080)
Syntax based on the YAML
, require datastore
element and it configration parameters. If empty the parameters of datastore
, used in-memory
datastore.
Examples:
# MySQL
datastore:
mysql:
addr: "localhost:3306"
user: pubsub
password: ""
# Redis
datastore:
redis:
addr: "localhost:6379"
db: 0
# In-memory
datasotre:
Components
Component |
Features |
Publisher |
* Message push to Topic |
Topic |
* Recieve publish Message * Save Message to datastor * Transport Message to Subscription |
Datastore |
* Save and mutex Message * Selectable backend storage |
Subscription |
* Recieve Subscriber pull request * Push Message to Subscriber |
Subscriber |
* Register some Subscription * Pull message from Subscription * Receive push Message from Subscription * Return ack response to Subscription |
Message flow
Quickstart
When do not specify created component(topic, subscription), Default component used.
- Publish Message
- Pull Message
- Subscriber return ack response
Use specific Topic and Subscription
- Create Topic
- Create Subscription (optional: specify push endpoint)
- Publish Message to specific Topic
- Push or Pull Message from specific Subscription
- Subscriber retrun ack response
API
Topic
Method |
URL |
Behavior |
create |
PUT: /topic/{name} |
create topic |
delete |
DELETE: /topic/{name} |
delete topic |
get |
GET: /topic/{name} |
get topic detail |
list |
GET: /topic/ |
get topic list |
list subscriptions |
GET: /topic/{name}/subscriptions |
get toipc depends subscriptions |
publish |
POST: /topic/{name}/publish |
create message save message to backend storage and deliver message to depends subscription |
Subscription
Method |
URL |
Behavior |
ack |
POST: /subscription/{name}/ack |
return ack response when receive ack from all depended Subscriptions, delete message. |
create |
PUT: /subscription/{name} |
create subscription |
delete |
DELETE: /subscription/{name} |
delete subscription |
get |
GET: /subscription/{name} |
get subscription detail |
pull |
POST: /subscription/{name}/pull |
get message |
modify ack config |
POST: /subscription/{name}/ack/modify |
modify ack timeout |
modify push config |
POST: /subscription/{name}/push/modify |
modify push config |
list |
GET: /subscription/ |
get subscripction list |
Monitoring
Method |
URL |
Behavior |
summary |
GET: /stats |
pubsub metrics summary |
topic summary |
GET: /stats/topic |
topic metrics summary |
topic detail |
GET: /stats/topic/{name} |
topic metrics detail |
subscription summary |
GET: /stats/subscription |
subscription metrics summary |
subscription detail |
GET: /stats/subscription/{name} |
subscription metrics detail |
TODO
- gRPC interface
- improve stats items
- authenticate