.NET 进程内队列 Channel 的入门与应用
.NET 进程内队列 Channel 的入门与应用 近期,博主为FakeRPC项目增加了WebSocket协议支持,利用全双工通信特性在一个连接中发送多条数据。考虑WebSocket协议是为了验证JSON-RPC的可行性,并为后续支持TCP/IP协议铺路。在实现FakeRPC过程中使用了.NET中的Channel数据结构来实现消息转发。Channel是.NET Core 3.0后推出的集合类型,主要应用于生产者-消费者模型。通过示例展示了Channel的应用,以及在FakeRPC中如何利用WebSocket协议实现双向通信。介绍了Channel的特性和在数据流处理中的应用,展示了其在性能方面的优势。通过实例展示了利用Channel实现数据流模式的过程。总结指出,过去的经历会影响认知,但持续学习新技术是必要的。
gRPC 流式传输极简入门指南
gRPC 流式传输极简入门指南 最近一直在研究 gRPC 的 ServerReflection,这是 gRPC 中提供的反射接口,对于动态调用 gRPC 接口非常有用。作者发现 ServerReflection API 使用了 gRPC 双向流的方式进行交互,类似于服务器推送技术如 WebSocket 和 Server-Sent Events。文章介绍了流式传输的概念,包括 HTTP/2 中的多路复用特性以及 gRPC 中的流式传输类型:客户端流、服务器端流和双向流。具体展示了这些流式传输类型在 gRPC 中的实现方式和对应的代码示例。最后,作者分享了对 gRPC 流式传输的兴趣和探索,强调了在工作中遇到的挑战和探索的乐趣。
EFCore 实体命名约定库:EFCore.NamingConventions 在软件开发中,数据库是一个重要话题,有不同的流派,一些人支持手写SQL,另一些喜欢ORM。介绍了EFCore.NamingConventions库,可在EFCore中指定实体命名约束规则,简化属性与数据库表字段映射,提高团队效率。示例展示了使用SnakeCaseNamingConvention生成数据库表字段,强调约定大于配置的重要性。团队应记录数据库规范,以避免配置混乱或新人不了解约定。这个库有利于标准化命名,提高开发效率。
ASP.NET Core gRPC 集成 Polly 实现优雅重试 在这篇博客中,作者探讨了在构建高可用微服务架构中的`gRPC`客户端重试方案。作者介绍了四种具体实现方式:基于`gRPC RetryPolicy`、基于`HttpClientFactory`、基于`gRPC拦截器`以及基于`CallInvoker`。其中,通过对`CallInvoker`的重写实现了灵活的重试策略,展示了一种更完美的解决方案。作者强调了在探索技术方案时,应先了解官方提供的标准方案,避免不必要的弯路。整体内容信息量丰富,分享了作者在探索重试方案过程中的思考和经验。
ASP.NET Core gRPC 拦截器的使用技巧分享 gRPC是微软在.NET Core中主推的RPC框架,具有跨语言、高性能、双向流式调用等优点。文章介绍了在.NET Core中使用gRPC拦截器实现日志记录的技巧,包括拦截器类的定义和各种调用方法的重写。通过拦截器实现了对gRPC请求和响应的详细日志记录。同时,展示了如何在服务器端和客户端实现拦截器,以及如何让拦截器生效的方法。文章总结了gRPC拦截器的使用技巧,强调了利用拦截器处理RPC服务调用时的统一处理需求。
从 C# 1.0 到 C# 9.0,历代 C# 语言特性一览 C# 版本历史记录涵盖了 C# 7.0、8.0 和 9.0 的语法特性。C# 7.0 引入了元组、更多的 expression-bodied 成员、out 变量、异步 Main 方法、模式匹配和引发表达式等特性。C# 8.0 带来了默认接口方法、异步流和索引和范围。而 C# 9.0 则包括了 Record、顶级语句和模式匹配增强等新特性,如`record`类型的引入、顶级语句简化和模式匹配语法的增强。
基于 Docker 构建 .NET 持续集成环境 项目团队正努力实现持续集成(CI)和持续部署(CD),以提高自动化水平。目前,虽然基于 Docker 实现了自动化部署,但部署包的构建仍依赖人工,且每次版本更新需通过邮件通知相关人员。文章详细介绍了使用 Jenkins 和 Docker 实现项目自动化构建的过程,包括代码编译、单元测试、静态检查和版本发布等环节。介绍了在 Linux 环境下使用 MSBuild、Nuget、Sonar 和 NUnit 等工具的方法,并通过 Dockerfile 构建了整个 CI 环境。尽管项目最终因与 Windows 关联过深而放弃该方案,但文章为搭建私有 Linux 构建环境提供了宝贵经验。同时,作者对 DevOps 实践中的一些现象提出了批判和反思。
使用 Mono 打造轻量级的.NET 程序运行时 本文介绍了如何通过 Mono 实现 .NET 程序的跨平台运行,并探讨了搭建轻量级的 .NET 运行时的可能性。首先,文章讨论了 .NET 版本兼容问题,提出了通过应用程序配置文件中的supportedRuntime 节点来指定应用程序兼容的 .NET Framework 版本。随后,文章介绍了 Mono 运行时的搭建,包括必要的组件和目录结构,以及如何使用命令行或 Mono Embedding 方案来运行 .NET 程序。文中还提供了一个使用 C++ 模拟命令行执行 Mono 运行时的示例代码,并讨论了如何避免命令行窗口弹出的问题。最后,文章总结了使用 Mono 实现轻量级 .NET 运行环境的优势和存在的问题,以及可能的解决方案。
使用 Mono 让.NET 程序跨平台运行 Unity3D引擎以其跨平台能力备受开发者青睐,跨平台开发对程序员而言至关重要。从Mono到Xamarin,介绍了.NET跨平台的原理和实现方式。探讨了Mono在实现.NET跨平台方面的作用,以及如何将.NET程序移植到Linux平台。讨论了.NET程序脱离.NET框架运行的可能性,重点在于解决基础类库的依赖问题。最后总结了跨平台开发的重要性和挑战,强调了编写跨平台代码的必要性。