【ITニュース解説】Fluent Brighter: How to setup a postgres
2025年09月05日に「Dev.to」が公開したITニュース「Fluent Brighter: How to setup a postgres」について初心者にもわかりやすいように丁寧に解説しています。
ITニュース概要
.NETアプリでFluent Brighterを使い、Postgresをメッセージング基盤として設定する方法を紹介。メッセージの定義、ハンドラー、データベース接続設定、Outbox/Inbox/Publish/Subscribeの設定手順を解説。`UsingPostgres`で設定を一元化し、複雑な構成にも対応。詳細はGitHubのサンプルコードを参照。
ITニュース解説
この記事では、.NETアプリケーションでメッセージングと分散トランザクションを扱うためのライブラリ、Fluent Brighterを使って、PostgreSQLデータベースをバックエンドとして設定する方法を解説する。特に、Outbox、Inbox、そしてメッセージングゲートウェイの機能をPostgreSQLで実現する方法に焦点を当てている。
まず、Fluent Brighterの基本的な概念を復習する。Fluent Brighterでは、メッセージをIRequestインターフェースを実装したクラスで表現する。メッセージには、単一の受信者を対象とするCommand(コマンド)と、複数の受信者に通知するEvent(イベント)の2種類がある。例えば、OrderPlacedというイベントは、注文が行われたことを通知するために使われる。
メッセージとアプリケーションオブジェクト間の変換は、Message Mapperを使って行う。Message Mapperは、IAmAMessageMapperインターフェースを実装したクラスで定義する。デフォルトではJSONシリアライゼーションが使用されるが、必要に応じてカスタムのマッパーを実装できる。
メッセージの処理は、Request Handlerで行う。Request Handlerは、RequestHandlerクラスを継承したクラスで定義し、受信したメッセージに対する具体的な処理を記述する。例えば、OrderPlacedHandlerは、OrderPlacedイベントを受信して、ログに注文情報を記録する処理を行う。
次に、PostgreSQLをFluent Brighterのバックエンドとして設定する方法を説明する。まず、services.AddFluentBrighterを使って、Fluent BrighterのサービスをDependency Injection(DI)コンテナに登録する。
PostgreSQLを使ったSubscription(サブスクリプション)の設定は、AddPostgresSubscriptionメソッドで行う。Subscriptionは、特定のキューからメッセージを受信するための設定で、受信するメッセージの種類やキューの名前などを指定する。
Publication(パブリケーション)の設定は、AddPostgresPublicationメソッドで行う。Publicationは、メッセージを特定のキューに送信するための設定で、送信するメッセージの種類やキューの名前などを指定する。
Outboxは、アプリケーションがデータベーストランザクションの一部としてメッセージを確実に送信するための仕組みだ。Outboxを設定するには、UsePostgresOutboxメソッドを使う。Outboxは、メッセージを一時的にデータベースに保存し、別のプロセスがそれをキューに送信する。UseDbTransactionOutboxArchiveとUseOutboxSweeperメソッドも併用することで、Outboxに蓄積されたメッセージを定期的に処理し、アーカイブすることが可能になる。ServiceActivatorHostedServiceは、Outboxに溜まったメッセージを処理するバックグラウンドタスクを提供する。
Inboxは、メッセージの重複処理を防ぐための仕組みだ。Inboxを設定するには、UsePostgresInboxメソッドを使う。Inboxは、受信したメッセージのIDをデータベースに記録し、同じメッセージが再度受信された場合に処理をスキップする。
UsingPostgresメソッドを使うと、PostgreSQLの接続設定を一度にまとめて定義できる。これにより、Outbox、Inbox、Publication、Subscriptionなど、複数のコンポーネントで同じ接続設定を共有できる。UsingPostgresの中では、接続文字列やテーブル名などを設定し、さらにUseInbox、UseOutbox、UsePublications、UseSubscriptionsといったメソッドを使って、各機能の詳細な設定を行う。例えば、AddPublication<GreetingEvent>(p => p.SetQueue("greeting.queue"))は、GreetingEventというメッセージを"greeting.queue"というキューに送信するためのPublicationを追加する。同様に、AddSubscription<GreetingEvent>(s => s.SetQueue("greeting.queue").SetMessagePumpType(MessagePumpType.Reactor))は、"greeting.queue"というキューからGreetingEventを受信するためのSubscriptionを追加する。MessagePumpType.Reactorは、メッセージポンプのタイプを指定するもので、ここではリアクターパターンを使用している。
このように、Fluent BrighterとPostgreSQLを組み合わせることで、堅牢で信頼性の高いメッセージングシステムを構築できる。UsingPostgresを使うことで設定が簡素化され、より複雑なシナリオにも対応できる柔軟性が保たれる。