diff --git a/ROADMAP.md b/ROADMAP.md index b30951041..e3e15165c 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -45,9 +45,9 @@ This document defines the roadmap for Kratos development. - [ ] Streaming Handler - [ ] Cache - [ ] go-redis -- [ ] Queue - - [ ] Broker API - - [ ] Kafka +- [x] Pubsub + - [x] Absctraction + - [x] Kafka - [ ] Nats - [ ] Database - [ ] Ent diff --git a/pubsub/README.md b/pubsub/README.md new file mode 100644 index 000000000..7fa8a0a83 --- /dev/null +++ b/pubsub/README.md @@ -0,0 +1,3 @@ +# Pubsub + +* [Kafka](https://github.com/go-kratos/kafka) diff --git a/pubsub/pubsub.go b/pubsub/pubsub.go new file mode 100644 index 000000000..de6d5dd6a --- /dev/null +++ b/pubsub/pubsub.go @@ -0,0 +1,39 @@ +package pubsub + +import ( + "context" +) + +// Message is an absctraction for all messages that +// are sent to quque or received from queue. +type Message struct { + Key string + Value []byte + Header map[string]string +} + +// Event given to a subscription handler for processing. +type Event interface { + Message() *Message + Ack() error + Nack() error +} + +// Handler is a callback function that processes messages delivered +// to asynchronous subscribers. +type Handler func(context.Context, Event) error + +// Publisher is absctraction for sending messages +// to queue. +type Publisher interface { + Publish(ctx context.Context, msg *Message) error + PublishAsync(ctx context.Context, msg *Message, callback func(err error)) error + Close() error +} + +// Subscriber is an absctraction for receiving messages +// from queue. +type Subscriber interface { + Subscribe(ctx context.Context, h Handler) error + Close() error +}