EasyNetQ 高度な設定方法: カスタムシリアライゼーション、メッセージインターセプター、トポロジ管理

カスタムシリアライゼーションによる効率的なデータ転送

メッセージの送受信においてシリアライゼーションは不可欠なプロセスです。EasyNetQ はデフォルトのシリアライズ方法に加えて、ISerializer インターフェースを実装することで独自のシリアライズ処理を定義できます。

以下は Newtonsoft.Json を使用してカスタム設定を適用する例です:

var jsonSettings = new JsonSerializerSettings
{
    TypeNameHandling = TypeNameHandling.All,
    DateTimeFormatString = "yyyy-MM-dd HH:mm:ss"
};

var messageBus = RabbitHutch.CreateBus("host=localhost", x => 
    x.Register(_ => new NewtonsoftJsonSerializer(jsonSettings))
);

同様に、System.Text.Json を使ったシリアライザも利用可能です。必要に応じてプロジェクトに含めることができます。

メッセージインターセプターによる拡張処理

EasyNetQ では IProduceConsumeInterceptor インターフェースを通じてメッセージの送受信時に処理を挿入できます。圧縮や暗号化、ログ出力などに活用できます。

以下のインターセプターが標準で提供されています:

  • GZipInterceptor - メッセージ圧縮機能
  • TripleDESInterceptor - メッセージ暗号化機能

インターセプターの追加例:

var messageBus = RabbitHutch.CreateBus("host=localhost", x => x
    .UseInterceptor(new GZipInterceptor())
    .UseInterceptor(new TripleDESInterceptor("暗号化キー"))
);

複数のインターセプターを組み合わせる場合は CompositeProduceConsumerInterceptor を使用します。

トポロジ管理による柔軟なキュー構成

RabbitMQ の交換機(エクスチェンジ)やキューの構成は IExchangeDeclareStrategy インターフェースで制御可能です。複数の戦略が組み込まれており、以下のような選択肢があります:

  • DefaultExchangeDeclareStrategy - デフォルトの交換機作成方法
  • VersionedExchangeDeclareStrategy - メッセージバージョン管理をサポート
  • MultipleExchangeDeclareStrategy - 複数交換機を同時に管理

交換機戦略の変更例:

var messageBus = RabbitHutch.CreateBus("host=localhost", x => 
    x.UseExchangeDeclareStrategy<VersionedExchangeDeclareStrategy>()
);

この設定により、メッセージバージョンの管理を効率的に行えます。

実践的な応用例

これらの機能を組み合わせることで、より柔軟で効率的なメッセージングシステムを構築できます。例えば:

  • バージョン管理付きの交換機戦略を使用してスキーマ変更に対応
  • GZipInterceptor でネットワーク負荷を軽減
  • カスタムシリアライザーでデータフォーマットを最適化

このようにして、複雑な要件にも対応可能なメッセージング基盤を構築できます。

タグ: RabbitMQ EasyNetQ .NET C# メッセージング

8月24日 03:41 投稿