C# AWS SQS消息处理方法 C#如何消费和发送SQS消息-C#.Net教程

必须先用GetQueueUrlAsync获取真实队列URL,而非手拼;接收后须用ReceiptHandle调用DeleteMessageAsync删除,不可用MessageId;轮询应设WaitTimeSeconds节制,Lambda需用SQSEvent参数正确解析。

用 AwsSdkNet 发送 SQS 消息前,必须确认队列 URL 是否有效

很多人卡在第一步:调用 SendMessageRequest 报错 InvalidAddress 或 NotFound。这不是代码问题,而是没拿到真实队列 URL——它不是控制台里看到的“队列名称”,而是形如 https://sqs.us-east-1.amazonaws.com/123456789012/my-queue 的完整地址。你得先用 CreateQueue 或 GetQueueUrl 获取它,不能手写拼接。

  • 推荐用 sqsClient.GetQueueUrlAsync(new GetQueueUrlRequest { QueueName = "my-queue" }) 动态获取,避免硬编码区域和账号 ID
  • 若跨区域访问,AmazonSQSClient 初始化时必须指定对应 RegionEndpoint,否则会默认走 us-east-1,导致 404
  • 消息体大小超 256KB?别硬塞——要么启用 S3 托管(用 AmazonSQSExtendedClient),要么提前拆分或压缩

ReceiveMessage 后不删消息,等于没处理

收到消息只是“暂取”,不是“消费完成”。SQS 默认保留消息(VisibilityTimeout 决定多久不可见),如果没显式调用 DeleteMessage,消息会在超时后重新入队,造成重复处理。这是生产环境最常被忽略的逻辑断点。

  • 务必在业务逻辑执行成功后,用 message.ReceiptHandle 调用 DeleteMessageAsync;失败则跳过删除,让消息重试
  • 不要用 message.MessageId 删除——它无效,只有 ReceiptHandle 是本次接收的唯一凭证
  • 批量接收(MaxNumberOfMessages > 1)时,每个消息要单独删,不能共用一个 ReceiptHandle

用 Polling + Delay 实现可靠轮询,别用死循环

官方 SDK 不提供“监听式”长连接 API,C# 端只能靠轮询。但直接 while(true) + Thread.Sleep(100) 会浪费 CPU、压垮队列、触发限流。正确做法是结合 VisibilityTimeout 和 WaitTimeSeconds 做节制拉取。

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » C# AWS SQS消息处理方法 C#如何消费和发送SQS消息-C#.Net教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4031786+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4031787+
  • 本周更新: 0+
  • 最后更新: 2026-03-16