CoreWCF 新增了 Amazon SQS 绑定

Amazon 为 CoreWCF 提供新的 SQS 绑定

Amazon 为 CoreWCF(Windows Communication Foundation 的开源替代方案)提供了一个新的绑定,支持在服务器和客户端代码中使用 Amazon Simple Queue Service (SQS)。这一新绑定允许将传统的 Microsoft MSMQ 绑定简单迁移到基于 AWS 云的实现。

Amazon SQS 简介

Amazon SQS 是一种基于云的队列服务,允许组件可靠且异步地发送、存储和接收消息。SQS 队列通过名称标识,可以进行读写操作。

SQS 绑定的特点

  • SQS 绑定与传统的 MSMQ 绑定一样,是一种单向绑定,即客户端不会收到通过绑定调用的服务的响应。因此,CoreWCF 服务接口中只能包含 void 方法。
  • CoreWCF 中的 MSMQ 支持(与 NetNamedPipe 一起)仍处于预览阶段,表明这些功能的开发仍在进行中。微软预计将为其 Azure 存储队列发布类似的绑定。

SQS 支持的两个包

  1. 客户端包:用于向队列发送消息。
  2. 服务器包:用于从队列读取消息并处理它们。
  3. AWS SDK for .NET 作为依赖项与这些包一起使用。GitHub 仓库中提供了完整的客户端-服务器代码示例。

使用 CoreWCF 调用 SQS 队列的步骤

  1. 在 .NET 项目中添加 AWS.WCF.Extensions NuGet 包。
  2. 创建身份验证提供者,即 AmazonSQSClient 实例,提供 AWS 凭证以访问队列。
  3. 将提供者实例和队列名称传递给 AwsSqsBinding 构造函数。
  4. 使用 CoreWCF 的 ChannelFactory 类创建服务调用的通信通道。
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();
channel.LogMessage("Hello World");

创建 CoreWCF 服务的步骤

  1. 使用 AWS.CoreWCF.Extensions NuGet 包。
  2. 在服务配置步骤中,将队列传输添加到 CoreWCF 服务集合。
  3. 使用 AddDefaultAWSOptions 扩展方法添加 SQS 客户端扩展方法,提供队列名称和 AWS 凭证。
  4. 在应用构建器配置步骤中,使用 EnsureSqsQueue 方法创建队列(如果不存在)。
  5. 使用 AddServiceEndpoint 方法将服务连接到队列,实例化 AwsSqsBinding 类并指定队列名称。
public class Startup {
  private static readonly string _queueName = "your-aws-sqs-queue";

  public void ConfigureServices(IServiceCollection services) {
    services.AddSingleton<LoggingService>();
    services.AddServiceModelServices();
    services.AddQueueTransport();

    AWSOptions option = new AWSOptions();
    option.Credentials = new BasicAWSCredentials("your access key", "your secret key");
    services.AddDefaultAWSOptions(option);
    services.AddSQSClient(_queueName);
  }

  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);
    });
  }
}

服务器端定制

  1. 并发级别:可以指定服务绑定的并发级别,默认情况下一次拉取一条消息,并在并行线程中处理。
  2. 回调集合:绑定在 IDispatchCallbackCollection 类中公开了两个回调集合,包含在 SQS 调用成功或失败时调用的委托,允许优雅降级或有意义地记录失败请求。

CoreWCF 项目背景

  • CoreWCF 项目于 2022 年 4 月正式发布,旨在提供 WCF 服务中最常用的功能子集。它兼容 .NET Standard 2.0,可以在 .NET Framework 4.6.2 或更高版本上进行迁移。
  • 它涵盖了 HTTP 和 TCP 传输协议,以及其他协议如 Kafka 和 RabbitMQ。当前版本为 1.5.1。

AWS 对 CoreWCF 的贡献

AWS 是 CoreWCF 社区项目的关键贡献者之一,该项目于 2019 年 6 月宣布。CoreWCF SQS 扩展在 GitHub 上以 Apache 2.0 许可证发布,当前版本为 1.0.3。

阅读 46
0 条评论