🚀 优质资源分享 🚀
学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
🧡 Python实战微信订餐小程序 🧡 | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |
💛Python量化交易实战💛 | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
前言
在过去的一些文章里面,我们聊了一些.NET平台上高性能编程的技巧,今天带大家了解一下AlterNats
这个库是如何做到远超同类SDK性能的。
NATS:NATS是一个开源、轻量级、高性能的分布式消息中间件,实现了高可伸缩性和优雅的Publish/Subscribe模型。NATS的开发哲学认为高质量的QoS应该在客户端构建,故只建立了Request-Reply,不提供 1.持久化 2.事务处理 3.增强的交付模式 4.企业级队列等功能,所以它的性能可以非常好。
NATS.NET:NATS.NET是NATS官方实现的C#语言客户端,它的架构和Go版本保持一致,导致没有使用一些高性能的API和新的语法,性能整体较弱,不过它支持.NET4.6+和.NETStandard1.6+几乎兼容主流的.NET版本。
AlterNats:因为官方实现的NATS.NET
性能较弱,所以大佬又实现使用了C#和.NET新特性和API编写了这个高性能NATS
客户端,它的发布订阅性能比StackExchange.Redis
和官方的Nats.Net快三倍以上。
上图是8byte数据发布订阅性能对比,可以看到AlterNats遥遥领先,比官方的实现快了很多。下面就带大家了解一下如何使用AlterNats和为什么它能实现这么高的性能。
使用
AlterNats的API完全采用async/await并保持C#原生风格。
// 创建一个链接
await using var conn = new NatsConnection();
// 订阅消息
var subscription = await conn.SubscribeAsync("foo", x =>
{
Console.WriteLine($"Received {x}");
});
// 发布消息
await conn.PublishAsync("foo", new Person(30, "bar"));
// 退订
subscription.Dipose();
// ---
public record Person(int Age, string Name);
NatsOptions/ConnectOptions是不可变的记录,它可以使用C#的new和with语法,非常的方便。
// 可选配置项可以通过`with`关键字
var options = NatsOptions.Default with
{
Url = "nats://127.0.0.1:9999",
LoggerFactory = new MinimumConsoleLoggerFactory(LogLevel.Information),
Serializer = new MessagePackNatsSerializer(),
ConnectOptions = ConnectOptions.Default with
{
Echo = true,
Username = "foo",