.NET 云原生架构师训练营(基于 OP Storming 和 Actor 的大型分布式架构三)--学习笔记...
Posted dotNET跨平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.NET 云原生架构师训练营(基于 OP Storming 和 Actor 的大型分布式架构三)--学习笔记...相关的知识,希望对你有一定的参考价值。
▲ 点击上方“DotNet NB”关注公众号
回复“1”获取开发者路线图
学习分享 丨作者 / 郑 子 铭
这是DotNet NB 公众号的第204篇原创文章
目录
为什么我们用 Orleans
Dapr VS Orleans
Actor 模型
Orleans 的核心概念
结合 OP Storming 的实践
结合 OP Storming 的实践
业务模型
设计模型
代码实现
代码实现
HelloOrleans.Host
Orleans.Providers.MongoDB
HelloOrleans.Contract
HelloOrleans.BlazorWeb
Orleans.Providers.MongoDB
接下来我们把它改为 MongoDB:Orleans.Providers.MongoDB: https://github.com/OrleansContrib/Orleans.Providers.MongoDB
引入 negut 包
<PackageReference Include="Orleans.Providers.MongoDB" Version="3.4.1" />
配置 MongoDB
builder.Host.UseOrleans(silo =>
silo.UseLocalhostClustering();
// silo.AddMemoryGrainStorage("hello-orleans");
silo.UseMongoDBClient("mongodb://localhost")
.AddMongoDBGrainStorage("hello-orleans", options =>
options.DatabaseName = "hello-orleans";
options.CollectionPrefix = "";
);
);
我们启动项目测试一下
Create 方法入参
"title": "第一个职位",
"description": "第一个职位"
可以看到方法调用成功,返回的 job 里面包含了 identity
"title": "第一个职位",
"description": "第一个职位",
"location": null,
"identity": "c83725f2-44da-45e0-bc2d-d849563cf924"
接着我们打开 MongoDB
可以看到 JobGrain 中有对应的 identity 的记录
因此我们可以看到 Storage 的切换是不会影响代码的
HelloOrleans.Contract
持久化之后我们再给它改变一下模式,现在我们是 silo 内模式,客户端和服务端是放到一起的
我们可以把它改变成 silo 外模式,客户端和服务端分开
创建一个类库项目 HelloOrleans.Contract
接着把 Contract 目录下的文件都搬到 HelloOrleans.Contract 项目中
添加 Orleans 的 nuget 包,它不需要添加 Server 的包
<ItemGroup>
<PackageReference Include="Microsoft.Orleans.Core" Version="3.6.5" />
<PackageReference Include="Microsoft.Orleans.CodeGenerator.MSBuild" Version="3.6.5" />
</ItemGroup>
接着在 Host 项目中添加 Contract 的项目引用,即可生成成功
HelloOrleans.BlazorWeb
创建一个 Blazor Server 项目 HelloOrleans.BlazorWeb
添加 Orleans 的 nuget 包
<PackageReference Include="Microsoft.Orleans.Client" Version="3.6.5" />
在 Program 中添加 Orleans 客户端的配置
var builder = WebApplication.CreateBuilder(args);
var clientBuilder = new ClientBuilder();
clientBuilder.UseLocalhostClustering();
和服务端一样使用 UseLocalhostClustering
通过单例将 client 配置进去
var builder = WebApplication.CreateBuilder(args);
var clientBuilder = new ClientBuilder();
clientBuilder.UseLocalhostClustering();
builder.Services.AddSingleton(sp =>
var client = clientBuilder.Build();
client.Connect().Wait();
return client;
);
接着在 Blazor 的 Index Page 尝试获取我们刚刚保存的 Job,需要添加 Contract 的项目引用
@page "/"
@using Orleans
@using HelloOrleans.Host.Contract.Entity
@using HelloOrleans.Host.Contract.Grain
<PageTitle>Index</PageTitle>
<h1>Hello, world!</h1>
Welcome to your new app.
<SurveyPrompt Title="How is Blazor working for you?" />
职位标题:@Model.Title
<br/>
职位描述:@Model.Description
@code
[Inject]
public IClusterClient ClusterClient get; set;
public Job Model get; set; = new Job();
protected override async Task OnInitializedAsync()
var jobId = "c1eb55ff-74bc-4747-a782-5786cc3cdf80";
var jobGrain = ClusterClient.GetGrain<IJobGrain>(jobId);
Model = await jobGrain.Get();
相当于获取 Job,然后将 Job 的相关信息展现在页面上
接着我们测试一下,先启动 Host,再启动 Blazor
可以看到我们已经获取到了职位的信息
源码链接:https://github.com/MingsonZheng/HelloOrleans
推荐阅读:
.NET 那些年我们用过的组件-结构化日志组件 Serilog
C# 多线程并行编程篇之结构化
.NET性能优化-使用RecyclableMemoryStream替代MemoryStream
.NET周报【12月第4期 2022-12-31】
一款统计摸鱼时长的开源项目
dotnet 世界猜测 随机数的小测试
点击下方卡片关注DotNet NB
一起交流学习
▲ 点击上方卡片关注DotNet NB,一起交流学习
请在公众号后台
回复 【路线图】获取.NET 2021开发者路线图
回复 【原创内容】获取公众号原创内容
回复 【峰会视频】获取.NET Conf开发者大会视频
回复 【个人简介】获取作者个人简介
回复 【年终总结】获取作者年终总结
回复 【加群】加入DotNet NB 交流学习群
长按识别下方二维码,或点击阅读原文。和我一起,交流学习,分享心得。
以上是关于.NET 云原生架构师训练营(基于 OP Storming 和 Actor 的大型分布式架构三)--学习笔记...的主要内容,如果未能解决你的问题,请参考以下文章
.NET 云原生架构师训练营(基于 OP Storming 和 Actor 的大型分布式架构二)--学习笔记...
.NET 云原生架构师训练营(KestrelServer源码分析)--学习笔记