You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

aws-sqs.md 2.5 KiB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. # Amazon SQS
  2. AWS SQS 是一种完全托管的消息队列服务,可让您分离和扩展微服务、分布式系统和无服务器应用程序。
  3. AWS SNS 是一种高度可用、持久、安全、完全托管的发布/订阅消息收发服务,可以轻松分离微服务、分布式系统和无服务器应用程序。
  4. ## CAP 如何使用 AWS SNS & SQS
  5. ### SNS
  6. 由于 CAP 是基于 Topic 模式工作的,所以需要使用到 AWS SNS,SNS 简化了消息的发布订阅架构。
  7. 在 CAP 启动时会将所有的订阅名称注册为 SNS 的 Topic,你将会在管理控制台中看到所有已经注册的 Topic 列表。
  8. 由于 SNS 不支持使用 `.` `:` 等符号作为 Topic 的名称,所以我们进行了替换,我们将 `.` 替换为了 `-`,将 `:` 替换为了 `_`
  9. !!! note "注意事项"
  10. Amazon SNS 当前允许发布的消息最大大小为 256KB
  11. 举例,你的当前项目中有以下两个订阅者方法
  12. ```C#
  13. [CapSubscribe("sample.sns.foo")]
  14. public void TestFoo(DateTime value)
  15. {
  16. }
  17. [CapSubscribe("sample.sns.bar")]
  18. public void TestBar(DateTime value)
  19. {
  20. }
  21. ```
  22. 在 CAP 启动后,在 AWS SNS 中你将看到
  23. ![img](/img/aws-sns-demo.png)
  24. ### SQS
  25. 针对每个消费者组,CAP 将创建一个与之对应的 SQS 队列,队列的名称为配置项中 DefaultGroup 的名称,类型为 Standard Queue 。
  26. 该 SQS 队列将订阅 SNS 中的 Topic ,如下图:
  27. ![img](/img/aws-sns-demo.png)
  28. !!! warning "注意事项"
  29. 由于 AWS SNS 的限制,当你减少订阅方法时,我们不会主动删除 AWS SNS 或者 SQS 上的相关 Topic 或 Queue,你需要手动删除他们。
  30. ## 配置
  31. 要使用 AWS SQS 作为消息传输器,你需要从 NuGet 安装以下扩展包:
  32. ```shell
  33. Install-Package DotNetCore.CAP.AmazonSQS
  34. ```
  35. 然后,你可以在 `Startup.cs` 的 `ConfigureServices` 方法中添加基于 RabbitMQ 的配置项。
  36. ```csharp
  37. public void ConfigureServices(IServiceCollection services)
  38. {
  39. // ...
  40. services.AddCap(x =>
  41. {
  42. x.UseAmazonSQS(opt=>
  43. {
  44. //AmazonSQSOptions
  45. });
  46. // x.UseXXX ...
  47. });
  48. }
  49. ```
  50. #### AmazonSQS Options
  51. CAP 直接对外提供的 AmazonSQSOptions 配置参数如下:
  52. NAME | DESCRIPTION | TYPE | DEFAULT
  53. :---|:---|---|:---
  54. Region | AWS 所处的区域 | Amazon.RegionEndpoint |
  55. Credentials | AWS AK SK信息 | Amazon.Runtime.AWSCredentials |
  56. 如果你的项目运行在 AWS EC2 中,则不需要设置 Credentials,直接对 EC2 应用 IAM 策略即可。
  57. Credentials 需要具有新增和订阅 SNS Topic,SQS Queue 等权限。