博客园 - chester·chen
uuid:7d267088-5232-4821-9010-8cd5fdd6cd4f;id=1077331
2024-03-28T02:34:06Z
chester·chen
https://www.cnblogs.com/chenyishi/
feed.cnblogs.com
https://www.cnblogs.com/chenyishi/p/18099103
.NET分布式Orleans - 6 - 事件溯源 - chester·chen
基本概念 事件溯源(Event Sourcing)是一种设计模式,它记录并存储了应用程序状态变化的所有事件。 其核心思想是将系统中的每次状态变化都视为一个事件,并将这些事件以时间顺序的方式持久化存储。 这样,通过重放这些事件,我们可以重建系统在任何特定时间点的状态。 每个事件通常都包含了描述状态变化
2024-03-28T02:34:00Z
2024-03-28T02:34:00Z
chester·chen
https://www.cnblogs.com/chenyishi/
【摘要】基本概念 事件溯源(Event Sourcing)是一种设计模式,它记录并存储了应用程序状态变化的所有事件。 其核心思想是将系统中的每次状态变化都视为一个事件,并将这些事件以时间顺序的方式持久化存储。 这样,通过重放这些事件,我们可以重建系统在任何特定时间点的状态。 每个事件通常都包含了描述状态变化 <a href="https://www.cnblogs.com/chenyishi/p/18099103" target="_blank">阅读全文</a>
https://www.cnblogs.com/chenyishi/p/18097148
.NET分布式Orleans - 5 - 持久化 - chester·chen
在分布式系统中,数据的持久化是至关重要的一环。 Orleans 7 引入了强大的持久化功能,使得在分布式环境下管理数据变得更加轻松和可靠。 本文将介绍什么是 Orleans 7 的持久化,如何设置它以及相应的代码示例。 什么是 Orleans 7 的持久化? Orleans 7 的持久化是指将 Or
2024-03-27T01:02:00Z
2024-03-27T01:02:00Z
chester·chen
https://www.cnblogs.com/chenyishi/
【摘要】在分布式系统中,数据的持久化是至关重要的一环。 Orleans 7 引入了强大的持久化功能,使得在分布式环境下管理数据变得更加轻松和可靠。 本文将介绍什么是 Orleans 7 的持久化,如何设置它以及相应的代码示例。 什么是 Orleans 7 的持久化? Orleans 7 的持久化是指将 Or <a href="https://www.cnblogs.com/chenyishi/p/18097148" target="_blank">阅读全文</a>
https://www.cnblogs.com/chenyishi/p/18094375
.NET分布式Orleans - 4 - 计时器和提醒 - chester·chen
Timer是什么 Timer 是一种用于创建定期粒度行为的机制。 与标准的 .NET System.Threading.Timer 类相似,Orleans 的 Timer 允许在一段时间后执行特定的操作,或者在特定的时间间隔内重复执行操作。 它在分布式系统中具有重要作用,特别是在处理需要周期性执行的
2024-03-26T01:18:00Z
2024-03-26T01:18:00Z
chester·chen
https://www.cnblogs.com/chenyishi/
【摘要】Timer是什么 Timer 是一种用于创建定期粒度行为的机制。 与标准的 .NET System.Threading.Timer 类相似,Orleans 的 Timer 允许在一段时间后执行特定的操作,或者在特定的时间间隔内重复执行操作。 它在分布式系统中具有重要作用,特别是在处理需要周期性执行的 <a href="https://www.cnblogs.com/chenyishi/p/18094375" target="_blank">阅读全文</a>
https://www.cnblogs.com/chenyishi/p/18091682
.NET分布式Orleans - 3 - Grain放置 - chester·chen
在Orleans 7中,Grain放置是指确定将Grain对象放置在Orleans集群中的哪些物理节点上的过程。 Grain是Orleans中的基本单位,代表应用程序中的逻辑单元或实体。Grain放置策略是一种机制,用于根据不同的因素,将Grain对象放置在合适的节点上,以实现负载均衡、最小化网络延
2024-03-25T01:03:00Z
2024-03-25T01:03:00Z
chester·chen
https://www.cnblogs.com/chenyishi/
【摘要】在Orleans 7中,Grain放置是指确定将Grain对象放置在Orleans集群中的哪些物理节点上的过程。 Grain是Orleans中的基本单位,代表应用程序中的逻辑单元或实体。Grain放置策略是一种机制,用于根据不同的因素,将Grain对象放置在合适的节点上,以实现负载均衡、最小化网络延 <a href="https://www.cnblogs.com/chenyishi/p/18091682" target="_blank">阅读全文</a>
https://www.cnblogs.com/chenyishi/p/18091260
.NET分布式Orleans - 2 - Grain的通信原理与定义 - chester·chen
Grain 是 Orleans 框架中的基本单元,代表了应用程序中的一个实体或者一个计算单元。 每个Silo都是一个独立的进程,Silo负责加载、管理和执行Grain实例,并处理来自客户端的请求以及与其他Silo之间的通信。 通信原理 在相同的Silo中,Grain与Grain之间的通信通过直接的方
2024-03-24T00:09:00Z
2024-03-24T00:09:00Z
chester·chen
https://www.cnblogs.com/chenyishi/
【摘要】Grain 是 Orleans 框架中的基本单元,代表了应用程序中的一个实体或者一个计算单元。 每个Silo都是一个独立的进程,Silo负责加载、管理和执行Grain实例,并处理来自客户端的请求以及与其他Silo之间的通信。 通信原理 在相同的Silo中,Grain与Grain之间的通信通过直接的方 <a href="https://www.cnblogs.com/chenyishi/p/18091260" target="_blank">阅读全文</a>
https://www.cnblogs.com/chenyishi/p/18089561
Orleans - 1 .NET生态构建分布式系统的利器 - chester·chen
在当今数字化时代,构建高效、可靠的分布式系统是许多企业和开发团队面临的挑战。微软的 Orleans 框架为解决这些挑战提供了一个强大而简单的解决方案。本文将介绍 Orleans 的核心概念,并通过一个简单的示例代码来演示其用法。 什么是 Orleans? Orleans 是由微软开发的一个开源分布式
2024-03-23T00:19:00Z
2024-03-23T00:19:00Z
chester·chen
https://www.cnblogs.com/chenyishi/
【摘要】在当今数字化时代,构建高效、可靠的分布式系统是许多企业和开发团队面临的挑战。微软的 Orleans 框架为解决这些挑战提供了一个强大而简单的解决方案。本文将介绍 Orleans 的核心概念,并通过一个简单的示例代码来演示其用法。 什么是 Orleans? Orleans 是由微软开发的一个开源分布式 <a href="https://www.cnblogs.com/chenyishi/p/18089561" target="_blank">阅读全文</a>
https://www.cnblogs.com/chenyishi/p/18086748
前端优化 之 preload - chester·chen
为了优化我们公司网站的性能,我最近引入了浏览器预加载技术(Preload)。 这项技术可以显著减少级联情况,提高资源加载的并行度,从而加速网站的加载速度。 Preload的原理 Preload的原理是在浏览器解析HTML文档时,提前加载页面所需的关键资源,如样式表、脚本文件和字体等。 通过预加载这些
2024-03-22T01:03:00Z
2024-03-22T01:03:00Z
chester·chen
https://www.cnblogs.com/chenyishi/
【摘要】为了优化我们公司网站的性能,我最近引入了浏览器预加载技术(Preload)。 这项技术可以显著减少级联情况,提高资源加载的并行度,从而加速网站的加载速度。 Preload的原理 Preload的原理是在浏览器解析HTML文档时,提前加载页面所需的关键资源,如样式表、脚本文件和字体等。 通过预加载这些 <a href="https://www.cnblogs.com/chenyishi/p/18086748" target="_blank">阅读全文</a>
https://www.cnblogs.com/chenyishi/p/18085582
Newtonsoft.Json/Json.NET忽略序列化时的意外错误 - chester·chen
在.NET中Newtonsoft.Json(Json.NET)是我们常用来进行Json序列化与反序列化的库。 而在使用中常会遇到反序列化Json时,遇到不规则的Json数据解构而抛出异常。 Newtonsoft.Json 支持序列化和反序列化过程中的错误处理。 允许您捕获错误并选择是处理它并继续序列
2024-03-21T01:58:00Z
2024-03-21T01:58:00Z
chester·chen
https://www.cnblogs.com/chenyishi/
【摘要】在.NET中Newtonsoft.Json(Json.NET)是我们常用来进行Json序列化与反序列化的库。 而在使用中常会遇到反序列化Json时,遇到不规则的Json数据解构而抛出异常。 Newtonsoft.Json 支持序列化和反序列化过程中的错误处理。 允许您捕获错误并选择是处理它并继续序列 <a href="https://www.cnblogs.com/chenyishi/p/18085582" target="_blank">阅读全文</a>
https://www.cnblogs.com/chenyishi/p/18082725
C# 12 拦截器 Interceptors - chester·chen
拦截器Interceptors是一种可以在编译时以声明方式替换原有应用的方法。 这种替换是通过让Interceptors声明它拦截的调用的源位置来实现的。 您可以使用拦截器作为源生成器的一部分进行修改,而不是向现有源编译添加代码。 演示 使用 .NET 8 创建一个控制台应用程序。并在Propert
2024-03-20T01:28:00Z
2024-03-20T01:28:00Z
chester·chen
https://www.cnblogs.com/chenyishi/
【摘要】拦截器Interceptors是一种可以在编译时以声明方式替换原有应用的方法。 这种替换是通过让Interceptors声明它拦截的调用的源位置来实现的。 您可以使用拦截器作为源生成器的一部分进行修改,而不是向现有源编译添加代码。 演示 使用 .NET 8 创建一个控制台应用程序。并在Propert <a href="https://www.cnblogs.com/chenyishi/p/18082725" target="_blank">阅读全文</a>
https://www.cnblogs.com/chenyishi/p/18081945
.Net Core 使用 TagProvider 与 Enricher 丰富日志 - chester·chen
TagProvider [LogProperties] 与 [LogPropertyIgnore] 如果用在DTO不存在任何问题,如果用在Domain实体上,可能有点混乱。 您可能不希望因日志记录问题而使您的域模型变得混乱。对于这种情况,可以使用[TagProvider]属性来丰富日志。 我们仍然使
2024-03-18T23:59:00Z
2024-03-18T23:59:00Z
chester·chen
https://www.cnblogs.com/chenyishi/
【摘要】TagProvider [LogProperties] 与 [LogPropertyIgnore] 如果用在DTO不存在任何问题,如果用在Domain实体上,可能有点混乱。 您可能不希望因日志记录问题而使您的域模型变得混乱。对于这种情况,可以使用[TagProvider]属性来丰富日志。 我们仍然使 <a href="https://www.cnblogs.com/chenyishi/p/18081945" target="_blank">阅读全文</a>
https://www.cnblogs.com/chenyishi/p/18078355
使用 LogProperties source generator 丰富日志 - chester·chen
Nuget包 Microsoft.Extensions.Telemetry.Abstractions 包含的新的日志记录source generator,它支持使用[LogProperties]将整个对象作为State与日志一起记录。 我将展示一种方法来控制如何使用[LogProperties]对象
2024-03-18T01:03:00Z
2024-03-18T01:03:00Z
chester·chen
https://www.cnblogs.com/chenyishi/
【摘要】Nuget包 Microsoft.Extensions.Telemetry.Abstractions 包含的新的日志记录source generator,它支持使用[LogProperties]将整个对象作为State与日志一起记录。 我将展示一种方法来控制如何使用[LogProperties]对象 <a href="https://www.cnblogs.com/chenyishi/p/18078355" target="_blank">阅读全文</a>
https://www.cnblogs.com/chenyishi/p/18075600
.NET Core使用 CancellationToken 取消API请求 - chester·chen
您是否曾经访问过一个网站,它需要很长时间加载,最终你敲击 F5 重新加载页面。 即使用户刷新了浏览器取消了原始请求,而对于服务器来说,API也不会知道它正在计算的值将在结束时被丢弃,刷新五次,服务器将触发 5 个请求。 为了解决这个问题,ASP.NET Core 为 Web 服务器提供了一种机制,就
2024-03-17T00:11:00Z
2024-03-17T00:11:00Z
chester·chen
https://www.cnblogs.com/chenyishi/
【摘要】您是否曾经访问过一个网站,它需要很长时间加载,最终你敲击 F5 重新加载页面。 即使用户刷新了浏览器取消了原始请求,而对于服务器来说,API也不会知道它正在计算的值将在结束时被丢弃,刷新五次,服务器将触发 5 个请求。 为了解决这个问题,ASP.NET Core 为 Web 服务器提供了一种机制,就 <a href="https://www.cnblogs.com/chenyishi/p/18075600" target="_blank">阅读全文</a>
https://www.cnblogs.com/chenyishi/p/18073694
.Net Core 你必须知道的source-generators - chester·chen
源生成器是 C# 9 中引入的一项功能,允许在编译过程中动态生成代码。 它们直接与 C# 编译器集成(Roslyn)并在编译时运行,分析源代码并根据分析结果生成附加代码。 源生成器提供了一种简化的自动化代码生成方法,无需外部工具或单独的预编译步骤。 通过无缝集成到编译过程中,源生成器可以提高生产力、
2024-03-16T00:30:00Z
2024-03-16T00:30:00Z
chester·chen
https://www.cnblogs.com/chenyishi/
【摘要】源生成器是 C# 9 中引入的一项功能,允许在编译过程中动态生成代码。 它们直接与 C# 编译器集成(Roslyn)并在编译时运行,分析源代码并根据分析结果生成附加代码。 源生成器提供了一种简化的自动化代码生成方法,无需外部工具或单独的预编译步骤。 通过无缝集成到编译过程中,源生成器可以提高生产力、 <a href="https://www.cnblogs.com/chenyishi/p/18073694" target="_blank">阅读全文</a>
https://www.cnblogs.com/chenyishi/p/18073599
LoggerMessageAttribute 高性能的日志记录 - chester·chen
.NET 6 引入了 LoggerMessageAttribute 类型。 使用时,它会以source-generators的方式生成高性能的日志记录 API。 source-generators可在编译代码时,可以提供其他源代码作为编译的输入。 LoggerMessageAttribute依赖于
2024-03-15T01:50:00Z
2024-03-15T01:50:00Z
chester·chen
https://www.cnblogs.com/chenyishi/
【摘要】.NET 6 引入了 LoggerMessageAttribute 类型。 使用时,它会以source-generators的方式生成高性能的日志记录 API。 source-generators可在编译代码时,可以提供其他源代码作为编译的输入。 LoggerMessageAttribute依赖于 <a href="https://www.cnblogs.com/chenyishi/p/18073599" target="_blank">阅读全文</a>
https://www.cnblogs.com/chenyishi/p/18071178
DiagnosticSource DiagnosticListener 无侵入式分布式跟踪 - chester·chen
ASP.NET Core 中的框架中发出大量诊断事件,包括当前请求进入请求完成事件,HttpClient发出收到与响应,EFCore查询等等。 我们可以利用DiagnosticListener来选择性地监听这些事件,然后通过自己的方式组织这些日志,实现无侵入的分布式跟踪。 下面我们通过Diagnos
2024-03-14T01:14:00Z
2024-03-14T01:14:00Z
chester·chen
https://www.cnblogs.com/chenyishi/
【摘要】ASP.NET Core 中的框架中发出大量诊断事件,包括当前请求进入请求完成事件,HttpClient发出收到与响应,EFCore查询等等。 我们可以利用DiagnosticListener来选择性地监听这些事件,然后通过自己的方式组织这些日志,实现无侵入的分布式跟踪。 下面我们通过Diagnos <a href="https://www.cnblogs.com/chenyishi/p/18071178" target="_blank">阅读全文</a>
https://www.cnblogs.com/chenyishi/p/18068309
.Net Core中使用DiagnosticSource进行日志记录 - chester·chen
System.Diagnostics.DiagnosticSource 可以丰富地记录程序中地日志,包括不可序列化的类型(例如 HttpResponseMessage 或 HttpContext)。 System.Diagnostics.DiagnosticSource 通过订阅发布模式运行,我们可
2024-03-12T06:52:00Z
2024-03-12T06:52:00Z
chester·chen
https://www.cnblogs.com/chenyishi/
【摘要】System.Diagnostics.DiagnosticSource 可以丰富地记录程序中地日志,包括不可序列化的类型(例如 HttpResponseMessage 或 HttpContext)。 System.Diagnostics.DiagnosticSource 通过订阅发布模式运行,我们可 <a href="https://www.cnblogs.com/chenyishi/p/18068309" target="_blank">阅读全文</a>
https://www.cnblogs.com/chenyishi/p/18066796
多个 .NET Core SDK 版本之间进行切换 global.json - chester·chen
由于同一台电脑可以安装多个版本的.NET Core SDK。 当安装了许多不同版本的.NET Core SDK 之后,要如何才能使用旧版dotnet 命令,执行dotnet new 或dotnet build 之类的命令? 这部分其实并不困难,只要设定global.json 即可。 首先要查询目前电
2024-03-11T23:30:00Z
2024-03-11T23:30:00Z
chester·chen
https://www.cnblogs.com/chenyishi/
【摘要】由于同一台电脑可以安装多个版本的.NET Core SDK。 当安装了许多不同版本的.NET Core SDK 之后,要如何才能使用旧版dotnet 命令,执行dotnet new 或dotnet build 之类的命令? 这部分其实并不困难,只要设定global.json 即可。 首先要查询目前电 <a href="https://www.cnblogs.com/chenyishi/p/18066796" target="_blank">阅读全文</a>
https://www.cnblogs.com/chenyishi/p/18064531
HttpClientHandler VS SocketsHttpHandler - chester·chen
.NET Framework 和 .NET Core 2.0 及更低版本中由 HttpClient 使用的默认消息处理程序为HttpClientHandler。 从 .NET Core 2.1 开始,类SocketsHttpHandler提供了更高级别的 HTTP 网络类(例如HttpClient
2024-03-10T10:11:00Z
2024-03-10T10:11:00Z
chester·chen
https://www.cnblogs.com/chenyishi/
【摘要】.NET Framework 和 .NET Core 2.0 及更低版本中由 HttpClient 使用的默认消息处理程序为HttpClientHandler。 从 .NET Core 2.1 开始,类SocketsHttpHandler提供了更高级别的 HTTP 网络类(例如HttpClient <a href="https://www.cnblogs.com/chenyishi/p/18064531" target="_blank">阅读全文</a>
https://www.cnblogs.com/chenyishi/p/17956641
用AI在本地给.NET设计几张壁纸 - chester·chen
AI是当今和未来非常重要的技术领域之一,它在各个行业都有广泛的应用,如医疗保健、金融、教育、制造业等。学习AI可以让你了解和掌握未来技术发展的核心,并为未来的职业发展做好准备。现在有很多开源的Model可以让我们使用,使用这些开源Model在低成本下,我们也能完成自己的任务。 现在我的需求是给公众号
2024-01-10T07:46:00Z
2024-01-10T07:46:00Z
chester·chen
https://www.cnblogs.com/chenyishi/
【摘要】AI是当今和未来非常重要的技术领域之一,它在各个行业都有广泛的应用,如医疗保健、金融、教育、制造业等。学习AI可以让你了解和掌握未来技术发展的核心,并为未来的职业发展做好准备。现在有很多开源的Model可以让我们使用,使用这些开源Model在低成本下,我们也能完成自己的任务。 现在我的需求是给公众号 <a href="https://www.cnblogs.com/chenyishi/p/17956641" target="_blank">阅读全文</a>
https://www.cnblogs.com/chenyishi/p/17881219.html
将 .NET Aspire 部署到 Kubernetes 集群 - chester·chen
使用Aspirate可以将Aspire程序部署到Kubernetes 集群 工具安装 dotnet tool install -g aspirate --prerelease 注意:Aspirate 正在开发中,该软件包将作为预览版进行版本控制,--prelease 选项将获得最新的预览版。 容器注
2023-12-07T02:51:00Z
2023-12-07T02:51:00Z
chester·chen
https://www.cnblogs.com/chenyishi/
【摘要】使用Aspirate可以将Aspire程序部署到Kubernetes 集群 工具安装 dotnet tool install -g aspirate --prerelease 注意:Aspirate 正在开发中,该软件包将作为预览版进行版本控制,--prelease 选项将获得最新的预览版。 容器注 <a href="https://www.cnblogs.com/chenyishi/p/17881219.html" target="_blank">阅读全文</a>