微服务通过将应用程序分解为小型、松散耦合的服务来促进模块化,每个服务负责特定的功能。从单片应用程序到微服务架构的转变改变了我们开发软件的方式。这种转变改善了 可扩展性、弹性和 高可用性因为每个服务都可以独立开发、部署和管理。
消息代理在实现微服务之间的异步通信方面起着至关重要的作用。它保证了事件驱动、解耦的交互,使服务能够有效地通信,而不管响应时间如何。这些异步微服务通信的一个流行解决方案是 发布/订阅(Pub/Sub)消息模型.
NCache,.NET 8 的内存分布式缓存和 ASP.NET核心,提供改进的 发布/订阅消息传递功能。 它保证 容错、消息持久性以及 可扩展性 同时促进高性能和 事件驱动 微服务交互。
主要 投资讯息
亚毫秒级延迟: 通过将消息传递层从磁盘迁移到内存存储, NCache 消除了传统数据库典型的 I/O 开销,确保了高速事件分发。
解耦式可扩展性: 利用 NCache 事件总线允许微服务异步通信,使各个服务能够独立扩展,而不会造成系统范围内的瓶颈。
线性吞吐量增长: 分布式架构 NCache 发布/订阅模型确保消息处理能力随着集群中新节点的增加而线性增长。
可靠的事件分发: 持久订阅和消息过期等功能确保即使在高流量环境下,事件交付也能保持稳定和可管理。
如何扩展 .NET 微服务 NCache 内存发布/订阅
NCache 通过定义实现微服务之间的实时消息传递 主题 用于发布和订阅事件。 发行人 微服务发送事件到 NCache 消息代理,而 订户 微服务异步处理事件。

图 1:使用解耦微服务通信 NCache 作为内存事件总线。
更新后的 发布/订阅消息 NCache 与 .NET 8 和 ASP.NET Core 微服务架构保持一致,并与最新框架无缝集成。以下是其逻辑表示。 NCache 作为微服务的事件总线:
实施 NCache 在 .NET 8 中作为高性能事件总线
在.NET 8和ASP.NET Core微服务中, NCache 充当向多个订阅者发送消息的事件总线。开发人员可以使用 NCache 发布/订阅 API 用于快速、低延迟的消息传递,避免使用 RabbitMQ 或 Kafka 等外部消息代理。

图 2:通过可扩展后端通信实现容器化微服务之间的通信 NCache 内存代理。
使用以下方式实现发布/订阅 NCache 在 .NET 8 中
以下示例演示了如何 NCache 使用 eShopOnContainers 示例应用程序在真实场景中启用 Pub/Sub 消息传递。
发布活动(购物车结账示例)
以下代码片段来自 Basket.API 微服务,展示了如何将用户结账事件发布到 NCache 发布/订阅消息代理。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[Route("checkout")] [HttpPost] public async Task CheckoutAsync([FromBody] BasketCheckout basketCheckout, [FromHeader(Name = "x-requestid")] string requestId) { var userId = GetUserIdentity(); basketCheckout.RequestId = GetRequestID(); var basket = await GetBasketAsync(userId); var userName = User.FindFirst(x => x.Type == "unique_name").Value; var eventMessage = new UserCheckoutAcceptedIntegrationEvent(userId, userName, basketCheckout.Address, basketCheckout.CardNumber, basketCheckout.RequestId, basket); // Publish message to NCache Pub/Sub store eventBus.Publish(eventMessage); } |
订阅事件(订单处理示例)
Ordering.API 微服务订阅 UserCheckoutAcceptedEvent 并在用户完成结账时处理订单。
|
1 2 |
var eventBus = app.ApplicationServices.GetRequiredService(); eventBus.Subscribe<UserCheckoutAcceptedEvent, IIntegrationEventHandler>(); |
技术比较:基于磁盘的消息传递与基于网络的消息传递 NCache 内存发布/订阅
下表总结了传统基于磁盘的消息传递和基于磁盘的消息传递在性能和架构方面的主要差异。 NCache的内存发布/订阅模型。
| 特性 | 基于磁盘的消息传递(例如,RabbitMQ、SQL) | NCache 内存发布/订阅 |
|---|---|---|
| 主 I/O 路径 | 磁盘密集型持久化(fsync) | 内存密集型(DRAM) |
| 延迟曲线 | 毫秒(因磁盘 I/O 而异) | 亚毫秒级(可预测) |
| 国家管理 | 持久性(消息在完全重启后仍然存在) | 易失性/可复制(速度优化) |
| 缩放模型 | 垂直或集群分区 | 线性水平(动态成员) |
| 吞吐量瓶颈 | 磁盘争用和事务日志 | 网络带宽/CPU |
| 留言订购 | 严格(通常会导致排队首位阻塞) | 高并发(并行分布) |
什么是新的 NCache .NET 8 的发布/订阅消息传递?
以下是一些功能 NCache 规定:
- 持久订阅以实现可靠的消息传递
微服务可能会动态地加入或离开,并且网络故障可能会中断消息传递。 NCache 通过两种订阅模式确保消息的持久性:
- 通过连接重试提高弹性
NCache 即使在发生临时网络故障的情况下,也能在微服务和消息代理之间保持持久连接。它实现了:
为什么选择 NCache 用于微服务消息传递?
随着组织做出转变, NCache 提供了一个强大且分布式的消息代理,针对 .NET 8 和 ASP.NET Core 应用程序进行了优化。原因如下。 NCache 是一个理想的选择:
- 高速内存消息传递
与传统的消息代理不同, NCache 完全在内存中,为 Pub/Sub 消息传递提供亚毫秒级延迟。即使在高负载下也能确保实时事件处理。
- 线性可扩展的消息处理
NCache 支持 动态扩展随着更多微服务的添加,消息代理集群会动态扩展,以高效处理更大的消息量。
- 容错和高可用性
NCache 提供以下可靠性功能:
- 对等集群 消除单点故障。
- 自动复制确保消息在各个节点之间持久保存。
- 无缝添加/删除服务器,无需中断服务。
- 原生支持 .NET 8 和 ASP.NET Core
NCache 提供以下功能以确保无缝集成:
结语
随着微服务架构的不断变化,有效的服务间通信至关重要。 NCache, Pub/Sub 消息传递 简化了流程,消除了性能瓶颈,并为 .NET 8 和 ASP.NET Core 微服务提供了一个坚固、高速的消息传递基础。
要了解更多信息,请查看我们的博客 使用分布式缓存扩展微服务性能!
常见问题
问:怎么做 NCache 如果订阅者微服务断开连接,如何确保消息传递?
A: NCache 利用持久订阅在服务中断期间维护消息完整性。与标准订阅不同,持久订阅持久存在于服务器端;如果微服务离线, NCache 保留该特定订阅的消息,并在服务重新连接后发送这些消息,前提是消息尚未过期。
问:可以 NCache 发布/订阅模式如何处理不同编程语言之间的通信?
答:是的。 NCache 支持跨平台消息传递,允许使用不同语言(例如 .NET 和 Java 混合)编写的微服务围绕同一主题进行通信。通过使用 JSON 进行消息序列化,服务可以在不同的运行时环境中无缝共享数据。
问:在集群环境中,共享持久订阅的优势是什么?
答:共享持久订阅允许微服务的多个实例分担单个订阅的负载。 NCache 它采用轮询方式将消息分发到这些实例。这样即使一个实例发生故障,其他活跃实例也能继续处理消息,从而提供内置的容错性和负载均衡功能。
问:怎么做 NCache 如何防止消息代理成为可扩展性瓶颈?
A: NCache 它通过分布式对等架构避免了瓶颈。与可能存在单点故障的中心化代理不同, NCache 它将消息主题和处理负载分配到集群中的所有节点上。随着消息量的增加,您可以向集群添加更多服务器,从而实现吞吐量和容量的线性增长。






