CAP快速开始
CAP快速开始
了解如何使用 CAP 构建微服务事件总线架构,它比直接集成消息队列提供了哪些优势,它提供了哪些开箱即用的功能。
环境
VS2022 + .net5.0 + CAP
新建项目
新建一个WebAPI项目命名为“Yak.Cap.InMemory.Api”,分别添加处理消息Consumer和发布消息Publish两个控制器。
添加CAP依赖
PM> Install-Package DotNetCore.CAP
添加基于内存的事件存储和消息队列依赖
以便于快速启动,我们使用基于内存的事件存储和消息队列。
PM> Install-Package DotNetCore.CAP.InMemoryStorage
PM> Install-Package Savorboard.CAP.InMemoryMessageQueue
在 Startup.cs
中,添加以下配置:
public void ConfigureServices(IServiceCollection services)
{
services.AddCap(x =>
{
x.UseInMemoryStorage();
x.UseInMemoryMessageQueue();
});
}
发送消息
修改Publish控制器,发送时间:
public class PublishController : Controller
{
[Route("~/send")]
public IActionResult SendMessage([FromServices]ICapPublisher capBus)
{
capBus.Publish("test.show.time", DateTime.Now);
return Ok();
}
}
处理消息
修改Consumer控制器,接受时间:
public class ConsumerController : Controller
{
[NonAction]
[CapSubscribe("test.show.time")]
public void ReceiveMessage(DateTime time)
{
Console.WriteLine("message time is:" + time);
}
}
运行
运行项目后,在浏览器中输入:http://localhost:5000/send,调用接口发送消息。接受到信息如下:
带有头信息的消息
发送包含头信息的消息
在Publish控制器中添加发送方法。
[Route("~/CapHeaderSend")]
public IActionResult CapHeaderSendMessage([FromServices] ICapPublisher capBus)
{
var header = new Dictionary<string, string>()
{
["my.header.first"] = "first",
["my.header.second"] = "second"
};
capBus.Publish("test.CapHeadershow.time", DateTime.Now, header);
return Ok();
}
处理包含头信息的消息
在Consumer控制器中添加接受消息代码:
[NonAction]
[CapSubscribe("test.CapHeadershow.time")]
public void ReceiveCapHeaderMessage(DateTime time)
{
Console.WriteLine("message time is:" + time);
}
运行
运行项目后,在浏览器中输入:http://localhost:5000/CapHeaderSend,调用接口发送消息。接受到信息如下:
摘要
相对于直接集成消息队列,异步消息传递最强大的优势之一是可靠性,系统的一个部分中的故障不会传播,也不会导致整个系统崩溃。 在 CAP 内部会将消息进行存储,以保证消息的可靠性,并配合重试等策略以达到各个服务之间的数据最终一致性。
版权所有,转载请注明出处:https://www.cnblogs.com/yakniu/p/16192168.html
源码:
本文来自博客园,作者:{春光牛牛,yak},转载请注明原文链接:https://www.cnblogs.com/yakniu/p/16192168.html
欢迎各位大佬们评论指正
QQ讨论群:610129902
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构