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.

azure-service-bus.md 2.0 KiB

3 years ago
3 years ago
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. # Azure Service Bus
  2. Azure 服务总线是一种多租户云消息服务,可用于在应用程序和服务之间发送信息。 异步操作可实现灵活的中转消息传送、结构化的先进先出 (FIFO) 消息传送以及发布/订阅功能。
  3. CAP 支持使用 Azure Service Bus 作为消息传输器。
  4. ## Configuration
  5. !!! warning "必要条件"
  6. 针对 Service Bus 定价层, CAP 要求使用 “标准” 或者 “高级” 以支持 Topic 功能。
  7. 要使用 Azure Service Bus 作为消息传输器,你需要从 NuGet 安装以下扩展包:
  8. ```shell
  9. Install-Package DotNetCore.CAP.AzureServiceBus
  10. ```
  11. 然后,你可以在 `Startup.cs` 的 `ConfigureServices` 方法中添加基于内存的配置项。
  12. ```csharp
  13. public void ConfigureServices(IServiceCollection services)
  14. {
  15. // ...
  16. services.AddCap(x =>
  17. {
  18. x.UseAzureServiceBus(opt=>
  19. {
  20. //AzureServiceBusOptions
  21. });
  22. // x.UseXXX ...
  23. });
  24. }
  25. ```
  26. #### AzureServiceBus Options
  27. CAP 直接对外提供的 Azure Service Bus 配置参数如下:
  28. NAME | DESCRIPTION | TYPE | DEFAULT
  29. :---|:---|---|:---
  30. ConnectionString | Endpoint 地址 | string |
  31. TopicPath | Topic entity path | string | cap
  32. EnableSessions | 启用 [Service bus sessions](https://docs.microsoft.com/en-us/azure/service-bus-messaging/message-sessions) | bool | false
  33. ManagementTokenProvider | Token提供 | ITokenProvider | null
  34. #### Sessions
  35. 当使用 `EnableSessions` 选项启用 sessions 后,每个发送的消息都会具有一个 session id。 要控制 seesion id 你可以在发送消息时在消息头中使用 `AzureServiceBusHeaders.SessionId` 携带它。
  36. ```csharp
  37. ICapPublisher capBus = ...;
  38. string yourEventName = ...;
  39. YourEventType yourEvent = ...;
  40. Dictionary<string, string> extraHeaders = new Dictionary<string, string>();
  41. extraHeaders.Add(AzureServiceBusHeaders.SessionId, <your-session-id>);
  42. capBus.Publish(yourEventName, yourEvent, extraHeaders);
  43. ```
  44. 如果头中没有 session id , 那么消息 Id 仍然使用的 Message Id.