What is Watermill?

Watermill is a Golang library for efficiently processing message streams. It is designed for building event-driven applications and can be used for event sourcing, message-based RPC, sagas, and any other use cases you can think of. You can use traditional publish/subscribe implementations like Kafka or RabbitMQ, as well as HTTP or MySQL binlog, depending on your use case.

Watermill provides a set of publish/subscribe implementations and can be easily extended with your own implementation. It also comes with standard middleware such as dashboards, queues, rate limiting, correlation, etc., which are used by every message-driven application.

Why use Watermill?

With an increasing number of projects adopting microservices architecture in recent years, not all business scenarios can be resolved using synchronous RPC calls. Asynchronous task handling has become a valuable supplement.

The goal of Watermill is to become the standard messaging library for Go, hiding all this complexity behind an understandable API. It provides everything needed to build applications based on event or other asynchronous patterns. After reviewing the examples, you should be able to integrate Watermill into your project quickly.