Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

5 лет назад
5 лет назад
5 лет назад
5 лет назад
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. # 快速开始
  2. 了解如何使用 CAP 构建微服务事件总线架构,它比直接集成消息队列提供了哪些优势,它提供了哪些开箱即用的功能。
  3. ## 安装
  4. ```powershell
  5. PM> Install-Package DotNetCore.CAP
  6. ```
  7. ## 在 Asp.Net Core 中集成
  8. 以便于快速启动,我们使用基于内存的事件存储和消息队列。
  9. ```powershell
  10. PM> Install-Package DotNetCore.CAP.InMemoryStorage
  11. PM> Install-Package Savorboard.CAP.InMemoryMessageQueue
  12. ```
  13. 在 `Startup.cs` 中,添加以下配置:
  14. ```c#
  15. public void ConfigureServices(IServiceCollection services)
  16. {
  17. services.AddCap(x =>
  18. {
  19. x.UseInMemoryStorage();
  20. x.UseInMemoryMessageQueue();
  21. });
  22. }
  23. ```
  24. ## 发送消息
  25. ```c#
  26. public class PublishController : Controller
  27. {
  28. [Route("~/send")]
  29. public IActionResult SendMessage([FromServices]ICapPublisher capBus)
  30. {
  31. capBus.Publish("test.show.time", DateTime.Now);
  32. return Ok();
  33. }
  34. }
  35. ```
  36. ## 处理消息
  37. ```C#
  38. public class ConsumerController : Controller
  39. {
  40. [NonAction]
  41. [CapSubscribe("test.show.time")]
  42. public void ReceiveMessage(DateTime time)
  43. {
  44. Console.WriteLine("message time is:" + time);
  45. }
  46. }
  47. ```
  48. ## 带有头信息的消息
  49. ### 发送包含头信息的消息
  50. ```c#
  51. var header = new Dictionary<string, string>()
  52. {
  53. ["my.header.first"] = "first",
  54. ["my.header.second"] = "second"
  55. };
  56. capBus.Publish("test.show.time", DateTime.Now, header);
  57. ```
  58. ### 处理包含头信息的消息
  59. ```c#
  60. [CapSubscribe("test.show.time")]
  61. public void ReceiveMessage(DateTime time, [FromCap]CapHeader header)
  62. {
  63. Console.WriteLine("message time is:" + time);
  64. Console.WriteLine("message firset header :" + header["my.header.first"]);
  65. Console.WriteLine("message second header :" + header["my.header.second"]);
  66. }
  67. ```
  68. ## 摘要
  69. 相对于直接集成消息队列,异步消息传递最强大的优势之一是可靠性,系统的一个部分中的故障不会传播,也不会导致整个系统崩溃。 在 CAP 内部会将消息进行存储,以保证消息的可靠性,并配合重试等策略以达到各个服务之间的数据最终一致性。