Repolode
ThreeDotsLabs

ThreeDotsLabs/watermill

Uma biblioteca Go para criar aplicações orientadas a eventos, com uma interface unificada de Publisher/Subscriber para Kafka, RabbitMQ, NATS, SQL e outros.

Estrelas
9,927
Forks
515
Issues abertas
86
Último commit
há 2 meses

O que é?

Watermill é uma biblioteca Go para trabalhar com fluxos de mensagens. Ela é voltada a aplicações orientadas a eventos e a padrões como event sourcing, CQRS, sagas e RPC por mensagens. Sua abstração principal é um handler que recebe uma mensagem e retorna novas mensagens ou um erro, enquanto o middleware decide o que acontece em seguida.

A biblioteca define interfaces comuns de Publisher e Subscriber, permitindo que o mesmo código da aplicação funcione em vários backends. Entre os Pub/Subs compatíveis estão Kafka, RabbitMQ (AMQP), NATS JetStream, Redis Streams, Google Cloud Pub/Sub, AWS SNS/SQS e bancos de dados SQL (MySQL e PostgreSQL), além de um GoChannel em memória para uso local. As implementações de Pub/Sub ficam em repositórios separados da organização ThreeDotsLabs.

O projeto está na versão v1.0.0 e informa que suas implementações de Pub/Sub são testadas com suítes compartilhadas, executadas com o detector de condições de corrida e em modo de estresse paralelo. Também publica uma tabela de benchmarks que compara o throughput dos backends em uma única configuração de teste.

Recursos principais

  • 01Interfaces comuns de Publisher e Subscriber para vários brokers de mensagens
  • 02Modelo baseado em handlers que retornam novas mensagens ou erros
  • 03Middleware para compor comportamentos, como novas tentativas e fluxo de processamento
  • 04Compatibilidade com Kafka, RabbitMQ, NATS JetStream, Redis Streams, Google Cloud Pub/Sub, AWS SNS/SQS e bancos de dados SQL
  • 05GoChannel em memória para desenvolvimento e testes locais

Casos de uso

  • Criar serviços orientados a eventos que trocam mensagens entre componentes
  • Implementar event sourcing ou modelos de leitura CQRS em Go
  • Coordenar fluxos de trabalho de longa duração com sagas
  • Trocar de broker de mensagens sem reescrever a lógica da aplicação

Início rápido

  1. 1

    Instale o módulo da biblioteca Watermill

    go get github.com/ThreeDotsLabs/watermill
  2. 2

    Siga o guia Quickstart no site oficial para criar seu primeiro aplicativo

Antes de usar

  • É uma biblioteca Go, portanto só é útil se você desenvolver aplicativos em Go.
  • Cada backend de Pub/Sub, como Kafka ou RabbitMQ, fica em um módulo separado que você precisa adicionar por conta própria.
  • Os números dos benchmarks são estimativas aproximadas e dependem muito da configuração.

Tópicos

Perguntas frequentes

O que é watermill?
Uma biblioteca Go para criar aplicações orientadas a eventos, com uma interface unificada de Publisher/Subscriber para Kafka, RabbitMQ, NATS, SQL e outros. Watermill é uma biblioteca Go para trabalhar com fluxos de mensagens. Ela é voltada a aplicações orientadas a eventos e a padrões como event sourcing, CQRS, sagas e RPC por mensagens. Sua abstração principal é um handler que recebe uma mensagem e retorna novas mensagens ou um erro, enquanto o middleware decide o que acontece em seguida.
watermill é gratuito? Qual é a licença?
watermill é open source sob a licença MIT. Confira os termos da licença antes de usá-lo em produtos comerciais.
watermill ainda é mantido?
Atualizado nos últimos 6 meses. O último commit de watermill foi em 25 de ago. de 2026.
Para que posso usar watermill?
Criar serviços orientados a eventos que trocam mensagens entre componentes Implementar event sourcing ou modelos de leitura CQRS em Go Coordenar fluxos de trabalho de longa duração com sagas Trocar de broker de mensagens sem reescrever a lógica da aplicação
Como instalar watermill?
Instale o módulo da biblioteca Watermill: go get github.com/ThreeDotsLabs/watermill Siga o guia Quickstart no site oficial para criar seu primeiro aplicativo
Onde consigo watermill?
O código-fonte e as instruções de instalação estão no GitHub: https://github.com/ThreeDotsLabs/watermill

Resumo gerado por IA a partir do README do projeto. As estatísticas do GitHub são atualizadas diariamente.

Projetos relacionados