MQTT 5.0、3.1.1、3.1に対応するオープンソースのMQTTブローカー(サーバー)。C/C++クライアントライブラリとCLIツールも提供します。
ThreeDotsLabs/watermill
Kafka、RabbitMQ、NATS、SQLなどを共通のPublisher/Subscriberインターフェースで扱える、イベント駆動アプリケーション構築用のGoライブラリです。
- スター
- 9,927
- フォーク
- 515
- 未解決の Issue
- 86
- 最終コミット
- 2 か月前
これは何?
Watermillは、メッセージストリームを扱うためのGoライブラリです。イベント駆動アプリケーションを対象としており、イベントソーシング、CQRS、Saga、メッセージ経由のRPCといったパターンに対応します。中核となる抽象化は、メッセージを受け取り、新しいメッセージまたはエラーを返すハンドラーです。その後の処理はミドルウェアによって決まります。
ライブラリは共通のPublisherおよびSubscriberインターフェースを定義しているため、同じアプリケーションコードを複数のバックエンドで動かせます。対応するPub/Subには、Kafka、RabbitMQ(AMQP)、NATS JetStream、Redis Streams、Google Cloud Pub/Sub、AWS SNS/SQS、SQLデータベース(MySQLとPostgreSQL)があり、ローカル利用向けのインメモリGoChannelも用意されています。Pub/Subの実装は、ThreeDotsLabs組織内の個別リポジトリで提供されています。
プロジェクトはv1.0.0で、Pub/Sub実装は共通テストスイートを使い、race detectorを有効にした並列ストレステストで検証されていると説明されています。また、単一のテスト環境でバックエンドごとのスループットを比較したベンチマーク表も公開しています。
主な機能
- 01多くのメッセージブローカーで共通のPublisherおよびSubscriberインターフェースを利用
- 02ハンドラーが新しいメッセージまたはエラーを返すハンドラーベースのモデル
- 03リトライや処理フローなどの動作を組み合わせるミドルウェア
- 04Kafka、RabbitMQ、NATS JetStream、Redis Streams、Google Cloud Pub/Sub、AWS SNS/SQS、SQLデータベースに対応
- 05ローカル開発やテスト向けのインメモリGoChannel
ユースケース
- コンポーネント間でメッセージをやり取りするイベント駆動サービスの構築
- GoでのイベントソーシングやCQRSの読み取りモデルの実装
- Sagaによる長時間実行ワークフローの調整
- アプリケーションロジックを書き換えずにメッセージブローカーを切り替え
クイックスタート
- 1
Watermillライブラリモジュールをインストールする
go get github.com/ThreeDotsLabs/watermill - 2
公式サイトのQuickstartガイドに従って、最初のアプリを作成する
使う前に知っておきたいこと
- Goライブラリのため、Goでアプリケーションを開発する場合にのみ役立ちます。
- KafkaやRabbitMQなどのPub/Subバックエンドはそれぞれ別のモジュールとして提供されており、自分で追加する必要があります。
- ベンチマークの数値は概算であり、セットアップに大きく左右されます。
トピック
よくある質問
- watermill とは?
- Kafka、RabbitMQ、NATS、SQLなどを共通のPublisher/Subscriberインターフェースで扱える、イベント駆動アプリケーション構築用のGoライブラリです。 Watermillは、メッセージストリームを扱うためのGoライブラリです。イベント駆動アプリケーションを対象としており、イベントソーシング、CQRS、Saga、メッセージ経由のRPCといったパターンに対応します。中核となる抽象化は、メッセージを受け取り、新しいメッセージまたはエラーを返すハンドラーです。その後の処理はミドルウェアによって決まります。
- watermill は無料で使えますか?ライセンスは?
- watermill は MIT ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
- watermill は今もメンテナンスされていますか?
- 半年以内に更新あり。watermill の最終コミットは 2026年8月25日 です。
- watermill は何に使えますか?
- コンポーネント間でメッセージをやり取りするイベント駆動サービスの構築 GoでのイベントソーシングやCQRSの読み取りモデルの実装 Sagaによる長時間実行ワークフローの調整 アプリケーションロジックを書き換えずにメッセージブローカーを切り替え
- watermill のインストール方法は?
- Watermillライブラリモジュールをインストールする: go get github.com/ThreeDotsLabs/watermill 公式サイトのQuickstartガイドに従って、最初のアプリを作成する
- watermill はどこで入手できますか?
- ソースコードとインストール手順は GitHub にあります:https://github.com/ThreeDotsLabs/watermill
概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。
関連プロジェクト
RocketMQ、Kafka、RabbitMQ、Pulsar、Redis Stream、NATSなどのメッセージブローカーを、ひとつの画面から管理できるローカルファーストのデスクトップクライアントです。
ZooKeeperやJVMなしで動作する、C++製のKafka API互換ストリーミングデータプラットフォーム。
KubernetesやOpenShift上でApache Kafkaクラスターを実行・管理するKubernetes Operator。Kafka ConnectとKafka Streamsにも対応。
リアルタイムの利用量計測に対応した、従量課金・クレジット課金・ハイブリッド課金のためのオープンソース基盤。クラウドでもセルフホストでも利用できます。
Python向けの分散タスクキュー。バックグラウンドジョブの実行や、ワーカーとメッセージブローカーをまたいだ処理のスケジューリングに対応します。