沟通是关键。 尤其是当存在涉及数千个松散耦合实体的高事务分布式应用程序时。 在这种情况下,迫切需要不同模块之间可扩展且灵活的通信,以使您的应用程序平稳运行,而不会出现陈旧信息。
由于新兴应用程序正在转向基于微服务的架构,因此在设计相关应用程序的支持通信架构时,您需要考虑以下一些基本问题。
- 它可扩展吗?
- 它是可靠的吗?
- 存储效率高吗?
NCache 是一种内存分布式缓存,已被广泛采用以增强基于微服务的 .NET/ .NET Core 领域广泛应用,提供了卓越的解决方案。 NCache 现在提供发布者-订阅者 (Pub/Sub) 功能,为这些应用程序启用事件驱动的消息传递范例。
NCache 更多信息 NCache 发布/订阅 NCache 配套文档
系统—— NCache 发布/订阅
NCache 提供内存中的 Pub/Sub 消息传递,以在 .NET Web 应用程序中实现实时信息共享。 Pub/Sub 模型通过提供由感兴趣的用户发布和订阅消息的通道,自然地将发布者和订阅者解耦。 现在,当 NCache 作为消息传递总线,Pub/Sub 模型受益于底层 NCache 分布式架构 和众多得心应手 功能. 我们将看到如何结合 NCache 而 Pub/Sub 可以解决上述挑战并最终帮助您的应用程序更好地进行通信。
你可以看到 的核心组件 NCache 发布/订阅 了解此功能的基础知识。 事不宜迟,让我们先看看如何完成工作以利用 Pub/Sub 消息传递。
使用方法 NCache 发布/订阅消息
假设您有一个电子商务应用程序,您需要在其中收到添加到商店的每个新产品的通知。 因为它可以使用 NCache Pub/Sub,您首先需要 创建缓存. 建议为 Pub/Sub 使用专用缓存。 接下来,我们将讨论创建主题以获取与新产品相关的通知、发布消息和订阅消息的分步过程。
NCache 更多信息 NCache 发布/订阅 NCache 配套文档
创建主题
NCache 提供了一个 ITopic
界面以创建具有唯一名称的主题。 以下是您的发布者应用程序如何使用名称创建主题 新产品 使用方法 CreateTopic
.
1 2 3 4 5 6 |
// Pre-condition: Cache is already connected // Specify the topic name string topicName = “newProducts” // Create topic ITopic topic = cache.MessagingService.CreateTopic(topicName); |
如果主题已经存在,则返回主题的实例 ITopic
.
可能发生的情况是,某些事件更重要,需要在它们发生时立即传达。 例如,作为卖家/买家,获得有关销售成品/产品的通知可能是最重要的。 在这种情况下,您可以设置 主题优先 在创建主题时设置为高电平,无需等待即可收到相关通知。
发布消息
创建主题后,发布者应用程序可以使用 Publish
方法。 为此,您首先通过提供主题名称来获取主题的实例。 以下代码显示了如何将与新产品相关的消息发布到现有主题 新产品。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Pre-condition: Cache is already connected // Topic “newProducts” already created string topicName = “newProducts” // Get the topic ITopic productTopic = cache.MessagingService.GetTopic(topicName); // Create the object to be sent in message Product product = FetchProductFromDB(10248); // Create the new message with the object order var productMessage = new Message(product); // Publish the order with delivery option set as all orderTopic.Publish(productMessage, DeliveryOption.All, true); |
作为发布者,您可能需要根据应用程序的场景广播某些消息或传递给任何消息。 例如,如果产品的价格更新,则应通知所有订阅者。 但是,情况可能并非总是如此。 考虑到这一点,可以在发布消息时指定传递模式。 以下两个消息传递选项由 NCache 发布/订阅。
- 所有类型 (默认): 将消息传递给所有注册的订阅者。
- 不限: 将消息传递给任何注册的订阅者。
我们 交付选项 以获得更多细节。
此外,为了有效管理 Pub/Sub 缓存的存储空间,您还可以设置 消息过期.
订阅主题
在针对某个主题发布消息后,您的订阅者应用程序会针对该主题创建一个订阅,以使用 CreateSubscription
方法。 下面的代码显示了订阅者应用程序如何为主题创建订阅 新产品 MessageReceived
打回来。
1 2 3 4 5 6 7 8 9 10 |
// Pre-condition: Cache is already connected // Topic “newProducts” already created string topicName = “newProducts” // Get the topic ITopic productTopic = cache.MessagingService.GetTopic(topicName); // Create and register subscribers for topic newProducts // MessageReceived callback is specified ITopicSubscription orderSubscriber = orderTopic.CreateSubscription(MessageReceived); |
假设订阅者应用程序需要在收到销售通知时更新产品价格。 然后,可以在 MessageReceived
打回来。
在上面的示例中创建的订阅是非持久的,并且订阅默认是非持久的。 此外,您还可以 创建持久订阅 使用 NCache IDurableTopicSubscription
界面。 在持久订阅的情况下, NCache 在连接丢失时保留订阅者的订阅。 这意味着即使订阅者离线,发布在主题上的消息也会分配给订阅。 因此,订阅者可以在重新连接时收到这些消息。
更重要的是,您可以使用 基于模式的订阅方法 哪里 NCache 支持多个通配符。
注册通知
作为发布者,您可能需要了解消息的状态和主题的可用性。 让我们看看您的发布者应用程序在使用时可以注册哪些类型的通知 NCache 发布/订阅消息。
MessageDeliveryFailure:
如果消息由于任何问题而未能传递,则会收到通知。OnTopicDeleted:
在删除主题时收到通知。
以下是发布者如何简单地注册这两种类型的通知。
1 2 3 4 5 6 7 |
// You have an instance productTopic of existing topic // Register message delivery failure productTopic.MessageDeliveryFailure += OnFailureMessageReceived; //Register topic deletion notification productTopic.OnTopicDeleted = TopicDeleted; |
为什么 NCache 发布/订阅分布式消息?
至此,我们熟悉的 NCache 发布/订阅功能。 现在,有什么好处 Ncache Pub/Sub 提供处理最初提出的问题?
- NCache 提供 线性可扩展性 因此,您的应用程序可以无缝处理越来越多的订阅请求。
- NCache 确保 高可用性 NCache 适应用户在动态环境中的连接性。
- NCache 允许对缓存中的项目进行过期和驱逐,以智能管理存储空间。
因此,上述特性与 Pub/Sub 的松散耦合和异步消息传递模式一起构成 NCache Pub/Sub 功能非常有希望在您未来的 .Net 应用程序中进行分布式消息传递。