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 支持的两个包
- 客户端包:用于向队列发送消息。
- 服务器包:用于从队列读取消息并处理它们。
- AWS SDK for .NET 作为依赖项与这些包一起使用。GitHub 仓库中提供了完整的客户端-服务器代码示例。
使用 CoreWCF 调用 SQS 队列的步骤
- 在 .NET 项目中添加
AWS.WCF.ExtensionsNuGet 包。 - 创建身份验证提供者,即
AmazonSQSClient实例,提供 AWS 凭证以访问队列。 - 将提供者实例和队列名称传递给
AwsSqsBinding构造函数。 - 使用 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 服务的步骤
- 使用
AWS.CoreWCF.ExtensionsNuGet 包。 - 在服务配置步骤中,将队列传输添加到 CoreWCF 服务集合。
- 使用
AddDefaultAWSOptions扩展方法添加 SQS 客户端扩展方法,提供队列名称和 AWS 凭证。 - 在应用构建器配置步骤中,使用
EnsureSqsQueue方法创建队列(如果不存在)。 - 使用
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);
});
}
}服务器端定制
- 并发级别:可以指定服务绑定的并发级别,默认情况下一次拉取一条消息,并在并行线程中处理。
- 回调集合:绑定在
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。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。