BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース CoreWCFに新しいAmazon SQSバインディングが追加

CoreWCFに新しいAmazon SQSバインディングが追加

原文リンク(2023-11-15)

Amazonは、Windows Communication Foundationに代わるオープンソース向けに、サーバーとクライアントコードでAmazon Simple Queue Service(SQS)をサポートするCoreWCFの新しいバインディングの提供を発表した。この新しいバインディングにより、従来のMicrosoft MSMQバインディングをAWSのクラウドベースの実装に簡単に移行できる。

Amazon SQSはクラウドベースのキューサービスで、コンポーネントが非同期で確実にメッセージを送信、保存、受信できるようにする。SQSキューは名前によって識別され、読み書きができる。

CoreWCFのSQSバインディングは、レガシーのMSMQ(Microsoft Message Queuing)バインディングと同様、一方向バインディングである。そのため、CoreWCFのサービスインターフェイスではvoidメソッドしか使用できない。CoreWCFにおけるMSMQのサポートは(NetNamedPipeとともに)まだプレビュー段階であり、将来的に追加される可能性がある。マイクロソフトは、Azure Storage Queues向けに同様のバインディングをリリースする予定だ。

SQSのサポートには2つのパッケージがある。1つはキューにメッセージを送信するクライアントシナリオ用、もう1つはキューからメッセージを読み込んで処理するサーバーシナリオ用だ。AWS SDK for .NETは、パッケージの依存関係としてまとめられている。SQSによるクライアントサーバーコードの完全なサンプルは、エクステンションのGitHubリポジトリで入手可能だ。

CoreWCFを使ってAmazonのAWSでSQSキューを呼び出すには、開発者は.NETプロジェクトにAWS.WCF.Extensions NuGetパッケージを追加しなければならない。最初のステップは、キューにアクセスするためのAWS認証情報を供給する認証プロバイダ、AmazonSQSClientのインスタンスを作成することである。プロバイダーのインスタンスは、キュー名とともにAwsSqsBindingコンストラクターに渡される。そして、CoreWCFの通常のChannelFactoryクラスが呼び出されるサービスの通信チャネルを作成する必要がある。

// この例では、ILoggingServiceという既存のwCFサービスを想定しているvar sqsClient = new AmazonSQSClient();var sqsBinding = new AWS.WCF.Extensions.SQS.AwsSqsBinding(sqsClient, queueName);var endpointAddress = new EndpointAddress(new Uri(sqsBinding.QueueUrl));var factory = new ChannelFactory<ILoggingService>(sqsBinding, endpointAddress);var channel = factory.CreateChannel();((System.ServiceModel.Channels.IChannel)channel).Open();// wcf クライアント経由でメッセージを送信するchannel.LogMessage("Hello World");

SQSキューのコンシューマとして公開されるCoreWCFサービスを作成するには、開発者はAWS.CoreWCF.Extensions NuGetパッケージを使用する必要がある。サービスバインディングの作成は、サービス構成ステップでCoreWCFサービスコレクションにキュートランスポートを追加することから始まる。さらに、AddDefaultAWSOptions拡張メソッドを使用して、キュー名とAWS認証情報を持つSQSクライアント拡張メソッドを追加する必要がある。

アプリビルダーの設定では、キューが存在しない場合は、EnsureSqsQueueメソッドがキューを作成する。次に、AdsSqsBindingクラスをインスタンス化し、キュー名を指定するAddServiceEndpointメソッドを使用して、サービスをキューに接続する。

public class Startup {  private static readonly string _queueName = "your-aws-sqs-queue";  public void ConfigureServices(IServiceCollection services) {     services.AddSingleton<LoggingService>();    services.AddServiceModelServices();    services.AddQueueTransport();    // AWS の設定    AWSOptions option = new AWSOptions();    option.Credentials =        new BasicAWSCredentials("your access key", "your secret key");    services.AddDefaultAWSOptions(option);    services.AddSQSClient(_queueName);    // AWSの設定終了  }  public void Configure(IApplicationBuilder app, IHostingEnvironment env) {     var queueUrl = app.EnsureSqsQueue(_queueName);    app.UseServiceModel(services => {)      services.AddService<LoggingService>();      services.AddServiceEndpoint<LoggingService, ILoggingService>(          new AwsSqsBinding(), queueUrl);    });  }}

SQSバインディングパッケージでは、サーバー側で2つのカスタマイズができる。1つ目は、サービスバインディングの同時実行レベルを指定できることだ。これは、サーバーから一度に引き出されるメッセージの数を制御し(デフォルトは1つ)、メッセージは並列スレッドで処理される。もう1つのカスタマイズは、IDispatchCallbackCollectionクラスで2つのコールバックコレクションを公開したことだ。これらには、SQSへの呼び出しが成功または失敗したときに呼び出される2つのデリゲートが含まれており、グレースフルデグレードや、失敗したリクエストのログを取得可能にしている。

CoreWCFプロジェクトは2019年に始まったが、 2022年4月に正式にリリースされた。これは、.NETプラットフォーム上のWCFサービスからもっとも頻繁に使用される機能のサブセットを提供することを目的としている。これは.NET Standard 2.0と互換性があり、.NET Framework 4.6.2以上でそのまま移行できる。主流のWCFバインディングと、KafkaRabbitMQのような他のプロトコルで、HTTPとTCPトランスポートプロトコルをカバーしている。現在のバージョンは1.5.1だ。

AWSは、2019年6月に発表されたCoreWCFコミュニティプロジェクトの主要な貢献者の一つである。CoreWCF SQSエクステンションはApache 2.0ライセンスの下、GitHubで公開されている。エクステンションの現在のバージョンは1.0.3である。

作者について

この記事に星をつける

おすすめ度
スタイル

BT