diff --git a/messaging/config.go b/messaging/config.go index cbb7a43..ee71eb3 100644 --- a/messaging/config.go +++ b/messaging/config.go @@ -1 +1,19 @@ package messaging + +import "time" + +// Config holds library-wide options for producers and consumers. +type Config struct { + RetryCount int + RetryDelay time.Duration + Timeout time.Duration +} + +// DefaultConfig returns a reasonable default configuration +func DefaultConfig() Config { + return Config{ + RetryCount: 3, + RetryDelay: 500 * time.Millisecond, + Timeout: 5 * time.Second, + } +} diff --git a/messaging/consumer.go b/messaging/consumer.go index cbb7a43..3bfeeed 100644 --- a/messaging/consumer.go +++ b/messaging/consumer.go @@ -1 +1,9 @@ package messaging + +import "context" + +// Consumer defines the interface for consuming messages. +type Consumer interface { + Subscribe(ctx context.Context, topic string, handler HandlerFunc) error + Close() error +} diff --git a/messaging/error.go b/messaging/error.go index cbb7a43..d16ac7f 100644 --- a/messaging/error.go +++ b/messaging/error.go @@ -1 +1,8 @@ package messaging + +import "errors" + +var ( + ErrPublishFailed = errors.New("failed to publish message") + ErrSubscriptionErr = errors.New("failed to subscribe to topic") +) diff --git a/messaging/handler.go b/messaging/handler.go index cbb7a43..02c5894 100644 --- a/messaging/handler.go +++ b/messaging/handler.go @@ -1 +1,6 @@ package messaging + +import "context" + +// HandlerFunc defines the function signature for consuming messages. +type HandlerFunc func(ctx context.Context, msg Message) error diff --git a/messaging/message.go b/messaging/message.go index cbb7a43..2fef3f2 100644 --- a/messaging/message.go +++ b/messaging/message.go @@ -1 +1,9 @@ package messaging + +// Message represents a single message in the system. +type Message struct { + ID string + Payload []byte + Headers map[string]string + Timestamp int64 +} diff --git a/messaging/producer.go b/messaging/producer.go index cbb7a43..b9a3951 100644 --- a/messaging/producer.go +++ b/messaging/producer.go @@ -1 +1,9 @@ package messaging + +import "context" + +// Producer defines the interface for publishing messages. +type Producer interface { + Publish(ctx context.Context, topic string, msg Message) error + Close() error +}