Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 24 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,28 +7,28 @@
[![Go Reference](https://pkg.go.dev/badge/github.com/Gerfey/messenger.svg)](https://pkg.go.dev/github.com/Gerfey/messenger)
[![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)

> ⚠️ `v0.7.0` is a pre-release version — feel free to test and report issues!
> `v0.8.0` is a pre-release version — feel free to test and report issues!

> 📚 Full documentation available in the [GitHub Wiki](https://github.com/Gerfey/messenger/wiki/Documentation)
> Full documentation available in the [GitHub Wiki](https://github.com/Gerfey/messenger/wiki/Documentation)

🇷🇺 [Русская версия](README.ru.md)

## Features
- **Multiple Transports**: AMQP (RabbitMQ), In-Memory (sync)
## Features
- **Multiple Transports**: AMQP (RabbitMQ), Kafka, Redis (Stream), In-Memory (sync)
- **Middleware Chain**: Extensible middleware system for message processing
- **Event-Driven**: Built-in event dispatcher for lifecycle hooks
- **Retry Mechanism**: Configurable retry strategies with exponential backoff
- **Message Routing**: Flexible routing system for message distribution
- **Stamps System**: Metadata attachment for message tracking
- **YAML Configuration**: Easy configuration management with `%env(...)%` support

## 📦 Installation
## Installation
> Requires Go 1.24+
```bash
go get github.com/gerfey/messenger@v0.7.0
go get github.com/gerfey/messenger@v0.8.0
```

## 🚀 Quick Start
## Quick Start

### Define Your Message

Expand Down Expand Up @@ -83,33 +83,40 @@ bus, _ := m.GetDefaultBus()
_, _ = bus.Dispatch(ctx, &HelloMessage{Text: "World"})
```

## 🔍 More Examples
## More Examples

* Commands with void return
* Queries with return value access
* Retry and Dead Letter Queue
* Custom Middleware and Transports
* Event Listeners and Lifecycle Hooks
* Commands with void return
* Queries with return value access
* Retry and Dead Letter Queue
* Custom Middleware and Transports
* Event Listeners and Lifecycle Hooks

> See [Usage Scenarios](https://github.com/Gerfey/messenger/wiki/Usage-Scenarios) for commands, queries, return values and advanced use-cases.

## 🤝 Contributing
## Benchmark

- AMQP (RabbitMQ): [AMQP Transport Benchmark Report](docs/benchmark/AMQP-Benchmark.md)
- Redis (Stream): [Redis Transport Benchmark Report](docs/benchmark/Redis-Benchmark.md)
- Sync: [Sync Transport Benchmark Report](docs/benchmark/Sync-Benchmark.md)
- Kafka (Async): [Kafka Transport Async Benchmark Report](docs/benchmark/Kafka-async-Benchmark.md)

## Contributing

1. Fork the repository
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request

## ⚖️ License
## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## ⭐️ Support
## Support

If you find this project useful, please consider starring ⭐️ it and sharing with others!

## 🙏 Acknowledgments
## Acknowledgments

- Inspired by [Symfony Messenger](https://symfony.com/doc/current/messenger.html)
- Built with ❤️ for the Go community
41 changes: 24 additions & 17 deletions README.ru.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,30 +7,30 @@
[![Go Reference](https://pkg.go.dev/badge/github.com/Gerfey/messenger.svg)](https://pkg.go.dev/github.com/Gerfey/messenger)
[![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)

> ⚠️ Версия `v0.7.0` — это пре-релиз. Тестируйте и сообщайте о багах!
> Версия `v0.8.0` — это пре-релиз. Тестируйте и сообщайте о багах!

> 📚 Полная документация доступна на [GitHub Wiki](https://github.com/Gerfey/messenger/wiki/Documentation)
> Полная документация доступна на [GitHub Wiki](https://github.com/Gerfey/messenger/wiki/Documentation)

🇬🇧 [English README](README.md)

---

## Возможности
- **Множественные транспорты**: AMQP (RabbitMQ), In-Memory (`sync`)
## Возможности
- **Множественные транспорты**: AMQP (RabbitMQ), Kafka, Redis (Stream), In-Memory (sync)
- **Цепочка middleware**: Расширяемая система промежуточной обработки
- **Событийный движок**: Встроенный dispatcher событий жизненного цикла
- **Механизм повторов**: Настраиваемые стратегии ретраев с поддержкой DLQ
- **Маршрутизация сообщений**: Гибкое сопоставление сообщений и транспортов
- **Система метаданных (Stamps)**: Для трассировки и поведения сообщений
- **YAML-конфигурация**: С поддержкой переменных окружения `%env(...)%`

## 📦 Установка
## Установка
> Требуется Go версии **1.24+**
```bash
go get github.com/gerfey/messenger@v0.7.0
go get github.com/gerfey/messenger@v0.8.0
```

## 🚀 Быстрый старт
## Быстрый старт

### Определите сообщение

Expand Down Expand Up @@ -85,33 +85,40 @@ bus, _ := m.GetDefaultBus()
_, _ = bus.Dispatch(ctx, &HelloMessage{Text: "World"})
```

## 🔍 Больше примеров
## Больше примеров

* Команды без возврата значения
* Запросы с возвратом результата
* Повторные попытки и Dead Letter Queue
* Пользовательские middleware и транспорты
* Слушатели событий и хуки жизненного цикла
* Команды без возврата значения
* Запросы с возвратом результата
* Повторные попытки и Dead Letter Queue
* Пользовательские middleware и транспорты
* Слушатели событий и хуки жизненного цикла

> Смотри [Сценарии использования](https://github.com/Gerfey/messenger/wiki/Сценарии-использования).

## 🤝 Как внести вклад
## Показатели

- AMQP (RabbitMQ): [AMQP Transport Benchmark Report](docs/benchmark/AMQP-Benchmark.md)
- Redis (Stream): [Redis Transport Benchmark Report](docs/benchmark/Redis-Benchmark.md)
- Sync: [Sync Transport Benchmark Report](docs/benchmark/Sync-Benchmark.md)
- Kafka (Async): [Kafka Transport Async Benchmark Report](docs/benchmark/Kafka-async-Benchmark.md)

## Как внести вклад

1. Форкните репозиторий
2. Создайте новую ветку (`git checkout -b feature/amazing-feature`)
3. Сделайте коммит (`git commit -m 'Add some amazing feature'`)
4. Запушьте изменения (`git push origin feature/amazing-feature`)
5. Откройте Pull Request

## ⚖️ Лицензия
## Лицензия

Проект лицензирован под [MIT](LICENSE).

## ⭐️ Поддержка
## Поддержка

Если вам полезен этот проект — поставьте ⭐️ и расскажите другим!

## 🙏 Благодарности
## Благодарности

- Вдохновлено [Symfony Messenger](https://symfony.com/doc/current/messenger.html)
- Сделано с ❤️ для сообщества Go
1 change: 1 addition & 0 deletions api/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ type Builder interface {
RegisterStamp(any)
RegisterListener(any, any)
RegisterMiddleware(string, Middleware)
RegisterSerializer(string, Serializer)
RegisterTransportFactory(TransportFactory)
Build() (Messenger, error)
}
6 changes: 6 additions & 0 deletions api/serializer.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,9 @@ type Serializer interface {
Marshal(Envelope) ([]byte, map[string]string, error)
Unmarshal(body []byte, headers map[string]string) (Envelope, error)
}

type SerializerLocator interface {
Register(string, Serializer)
GetAll() []Serializer
Get(name string) (Serializer, error)
}
24 changes: 21 additions & 3 deletions api/transport.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,12 @@ package api
import (
"context"
"reflect"

"github.com/gerfey/messenger/config"
)

type Transport interface {
Sender
Receiver
Closer
}

type Sender interface {
Expand All @@ -21,11 +20,30 @@ type Receiver interface {
Receive(context.Context, func(context.Context, Envelope) error) error
}

type Closer interface {
Close() error
}

type Producer interface {
Send(context.Context, Envelope) error
Close() error
}

type Consumer interface {
Consume(context.Context, func(context.Context, Envelope) error) error
Close() error
}

type RetryableTransport interface {
Transport
Retry(context.Context, Envelope) error
}

type SetupableTransport interface {
Transport
Setup(ctx context.Context) error
}

type SenderLocator interface {
Register(string, Sender) error
GetSenders(Envelope) []Sender
Expand All @@ -35,7 +53,7 @@ type SenderLocator interface {

type TransportFactory interface {
Supports(string) bool
Create(string, string, config.OptionsConfig) (Transport, error)
Create(string, string, []byte, Serializer) (Transport, error)
}

type RoutedMessage interface {
Expand Down
Loading
Loading