当前位置: 首页 > news >正文

怎样给网站登录界面做后台wordpress 用户注册插件

怎样给网站登录界面做后台,wordpress 用户注册插件,建设工程司法解释(一),专业建站提供商介绍Actor模式将Actor描述为最低级别的“计算单元”。换句话说#xff0c;您在一个独立的单元#xff08;称为actor#xff09;中编写代码#xff0c;该单元接收消息并一次处理一个消息#xff0c;没有任何并发或线程。再换句话说#xff0c;根据ActorId划分独立计算单元… 介绍Actor模式将Actor描述为最低级别的“计算单元”。换句话说您在一个独立的单元称为actor中编写代码该单元接收消息并一次处理一个消息没有任何并发或线程。再换句话说根据ActorId划分独立计算单元后相同的ActorId重入要排队可以理解为lock(ActorId)注这里有个反例就是重入性的引入这个概念目前还是Preview它允许同一个链内可以重复进入判断的标准不止是ActorId这么简单即自己调自己是被允许的。这个默认是关闭的需要手动开启即默认不允许自己调自己。当您的代码处理一条消息时它可以向其他参与者发送一条或多条消息或者创建新的参与者。底层运行时管理每个参与者运行的方式、时间和地点并在参与者之间路由消息。大量的Actor可以同时执行Actor彼此独立执行。Dapr 包含一个运行时它专门实现了 Virtual Actor 模式。 通过 Dapr 的实现您可以根据 Actor 模型编写 Dapr Actor而 Dapr 利用底层平台提供的可扩展性和可靠性保证。  什么时候用ActorsActor 设计模式非常适合许多分布式系统问题和场景但您首先应该考虑的是该模式的约束。一般来说如果出现以下情况请考虑使用Actors模式来为您的问题或场景建模您的问题空间涉及大量数千个或更多小的、独立且孤立的状态和逻辑单元。您希望使用不需要与外部组件进行大量交互的单线程对象包括跨一组Actors查询状态。您的 Actor 实例不会通过发出 I/O 操作来阻塞具有不可预测延迟的调用者。Dapr Actor每个Actor都被定义为Actor类型的实例就像对象是类的实例一样。  例如可能有一个执行计算器功能的Actor类型并且可能有许多该类型的Actor分布在集群的各个节点上。每个这样的Actor都由一个Acotr ID唯一标识。  生命周期Dapr Actors是虚拟的这意味着他们的生命周期与他们的内存表现无关。因此它们不需要显式创建或销毁。Dapr Actors运行时在第一次收到对该Actor ID 的请求时会自动激活该Actor。如果一个Actor在一段时间内没有被使用Dapr Actors运行时就会对内存中的对象进行垃圾回收。如果稍后需要重新激活它还将保持对参与者存在的了解。如果稍后需要重新激活它还将保持对 Actor 的一切原有数据。调用 Actor 方法和提醒会重置空闲时间例如提醒触发将使Actor保持活跃。无论Actor是活跃还是不活跃Actor提醒都会触发如果为不活跃的Actor触发它将首先激活演员。Actor 计时器不会重置空闲时间因此计时器触发不会使 Actor 保持活动状态。计时器仅在Actor处于活动状态时触发。Reminders 和 Timers 最大的区别就是Reminders会保持Actor的活动状态而Timers不好会Dapr 运行时用来查看Actor是否可以被垃圾回收的空闲超时和扫描间隔是可配置的。当 Dapr 运行时调用 Actor 服务以获取支持的 Actor 类型时可以传递此信息。由于Virtual Actor模型的存在这种Virtual Actor生命周期抽象带来了一些注意事项事实上Dapr Actors实现有时会偏离这个模型。  第一次将消息发送到Actor ID时Actor被自动激活(导致构建Actor对象)。 经过一段时间后Actor对象将被垃圾回收。被回收后再次使用Actor ID将导致构造一个新的Actor对象。 Actor 的状态比对象的生命周期长因为状态存储在 Dapr 运行时配置的状态管理组件中。注Actor被垃圾回收之前Actor对象是会复用的。这里会导致一个问题在.Net Actor类中构造函数在Actor存活期间只会被调用一次。分发和故障转移为了提供可扩展性和可靠性Actor 实例分布在整个集群中Dapr 根据需要自动将它们从故障节点迁移到健康节点。Actors 分布在 Actor 服务的实例中而这些实例分布在集群中的节点之间。 对于给定的Actor类型每个服务实例都包含一组Actor。Dapr安置服务(Placement Service)Dapr Actor 运行时为您管理分发方案和密钥范围设置。这是由Actor Placement 服务完成的。创建服务的新实例时相应的 Dapr 运行时会注册它可以创建的Actor类型并且安置服务会计算给定Actor类型的所有实例的分区。每个Actor类型的分区信息表被更新并存储在环境中运行的每个Dapr实例中并且可以随着Actor服务的新实例的创建和销毁而动态变化。这如下图所示当客户端调用具有特定ID的Actor(例如Actor ID 123)时客户端的 Dapr 实例会Hash Actor类型和 ID并使用该信息调用可以为特定Actor ID的请求提供服务的相应Dapr实例。因此始终为任何给定的Actor ID 调用相同的分区或服务实例。这如下图所示这简化了一些选择但也带来了一些考虑:  默认情况下Actor 随机放置到 pod 中从而实现均匀分布。因为Actor是随机放置的应该可以预料到Actor操作总是需要网络通信包括方法调用数据的序列化和反序列化产生延迟和开销。注Dapr Actor 放置服务仅用于 Actor 放置因此如果您的服务不使用 Dapr Actors则不需要。 放置服务可以在所有托管环境中运行包括自托管和 Kubernetes。Actor通讯您可以通过HTTP/gRPC调用Actor当然也可以用SDK。POST/GET/PUT/DELETE http://localhost:3500/v1.0/actors/actorType/actorId/method/state/timers/reminders并发Dapr Actor 运行时为访问 Actor 方法提供了一个简单的回合制turn-basesd的访问模型。这意味着在任何时候Actor 对象的代码中都不能有超过一个线程处于活动状态。单个Actor实例一次不能处理多个请求。如果预期要处理并发请求Actor 实例可能会导致吞吐量瓶颈。单个Actor实例指每个Actor ID对应的Actor对象。单个Actor不并发就没有问题如果两个 Actor 之间存在循环请求而同时向其中一个 Actor 发出外部请求则 Actor 之间可能会陷入僵局。Dapr Actor运行时自动超时Actor调用并向调用者抛出异常以中断可能的死锁情况。重入性Preview作为对 dapr 中基础 Actor 的增强。现在重入性为预览功能感兴趣的小伙伴可以到看官方文档。回合制访问Turn-based access一个回合包括一个Actor方法的完整执行以响应来自其他Actor或客户端的请求或者一个计时器/提醒回调的完整执行。即使这些方法和回调是异步的Dapr Actor运行时也不会将它们交叉。一个回合必须完全完成后才允许进行新的回合。换句话说当前正在执行的Actor方法或计时器/提醒回调必须完全完成才能允许对方法或回调的新调用。Dapr Actor运行时通过在回合开始时获取每个Actor的锁并在回合结束时释放锁来实现基于回合的并发性。 因此基于回合的并发是在每个Actor的基础上执行的而不是跨Actor。Actor 方法和计时器/提醒回调可以代表不同的 Actor 同时执行。以下示例说明了上述概念。考虑实现两个异步方法例如 Method1 和 Method2、计时器和提醒的Actor 类型。下图显示了代表属于此Actor类型的两个ActorsActorId1 和 ActorId2执行这些方法和回调的时间线示例。Actor状态管理Actor可以使用状态管理功能可靠地保存状态。您可以通过 HTTP/gRPC 端点与 Dapr 交互以进行状态管理。要使用 actor您的状态存储必须支持事务。这意味着您的状态存储组件必须实现 TransactionalStore 接口。只有一个状态存储组件可以用作所有参与者的状态存储。事务支持列表https://docs.dapr.io/reference/components-reference/supported-state-stores/注建议学习的时候都用Redis官方所有的示例也都是基于Redis比较容易上手且Dapr init默认集成Actor计时器和提醒Actor可以通过注册计时器或提醒来安排自己的定期工作。计时器和提醒的功能非常相似。主要区别在于Dapr Actor 运行时在停用后不保留有关计时器的任何信息而使用 Dapr Actor 状态提供程序保留有关提醒的信息。定时器和提醒的调度配置是相同的总结如下DueTime 是一个可选参数用于设置第一次调用回调之前的时间或时间间隔。如果省略 DueTime则在定时器/提醒注册后立即调用回调。支持的格式RFC3339 日期格式例如2020-10-02T15:00:00Ztime.Duration 格式例如2h30mISO 8601 持续时间格式例如PT2H30Mperiod 是一个可选参数用于设置两次连续回调调用之间的时间间隔。当以 ISO 8601-1 持续时间格式指定时您还可以配置重复次数以限制回调调用的总数。如果省略 period则回调将仅被调用一次。支持的格式time.Duration 格式例如2h30mISO 8601 持续时间格式例如PT2H30M, R5/PT1M30Sttl 是一个可选参数用于设置计时器/提醒到期和删除的时间或时间间隔。如果省略 ttl则不应用任何限制。支持的格式RFC3339 日期格式例如2020-10-02T15:00:00Ztime.Duration 格式例如2h30mISO 8601 持续时间格式例如PT2H30M当您同时指定周期内的重复次数和 ttl 时计时器/提醒将在满足任一条件时停止。Actor 运行时配置actorIdleTimeout - 停用空闲 actor 之前的超时时间。每个 actorScanInterval 间隔都会检查超时。默认值60 分钟actorScanInterval - 指定扫描演员以停用空闲Actor的频率的持续时间。闲置时间超过 actor_idle_timeout 的 Actor 将被停用。默认值30 秒drainOngoingCallTimeout - 在耗尽Rebalanced的Actor的过程中的持续时间。这指定了当前活动 Actor 方法完成的超时时间。如果当前没有 Actor 方法调用则忽略此项。默认值60 秒drainRebalancedActors - 如果为 trueDapr 将等待 drainOngoingCallTimeout 持续时间以允许当前角色调用完成然后再尝试停用角色。默认值truedrainRebalancedActors与上面的drainOngoingCallTimeout需搭配使用reentrancy - (ActorReentrancyConfig) - 配置角色的重入行为。如果未提供则禁用可重入。默认值disabled, 0remindersStoragePartitions - 配置Actor提醒的分区数。如果未提供则所有提醒都将保存为Actor状态存储中的单个记录。默认值0// In Startup.cs public void ConfigureServices(IServiceCollection services) {// Register actor runtime with DIservices.AddActors(options {// Register actor types and configure actor settingsoptions.Actors.RegisterActorMyActor();// Configure default settingsoptions.ActorIdleTimeout TimeSpan.FromMinutes(60);options.ActorScanInterval TimeSpan.FromSeconds(30);options.DrainOngoingCallTimeout TimeSpan.FromSeconds(60);options.DrainRebalancedActors true;options.RemindersStoragePartitions 7;// reentrancy not implemented in the .NET SDK at this time});// Register additional services for use with actorsservices.AddSingletonBankService(); }分区提醒Preview在 sidecar 重新启动后Actor 提醒会保留并继续触发。在 Dapr 运行时版本 1.3 之前提醒被保存在 actor 状态存储中的单个记录上。此为Preview功能感兴趣可以看官方文档.Net调用Dapr的Actor与以往不同Actor示例会多创建一个共享类库用于存放Server和Client共用的部分创建Assignment.Shared创建类库项目并添加Dapr.ActorsNuGet包引用最后添加以下几个类AccountBalance.csnamespace Assignment.Shared; public class AccountBalance {public string AccountId { get; set; } default!;public decimal Balance { get; set; } }IBankActor.cs注这个是Actor接口IActor是Dapr SDK提供的using Dapr.Actors;namespace Assignment.Shared; public interface IBankActor : IActor {TaskAccountBalance GetAccountBalance();Task Withdraw(WithdrawRequest withdraw); }OverdraftException.csnamespace Assignment.Shared; public class OverdraftException : Exception {public OverdraftException(decimal balance, decimal amount): base($Your current balance is {balance:c} - thats not enough to withdraw {amount:c}.){} }WithdrawRequest.csnamespace Assignment.Shared; public class WithdrawRequest {public decimal Amount { get; set; } }创建Assignment.Server创建类库项目并添加Dapr.Actors.AspNetCoreNuGet包引用和Assignment.Shared项目引用最后修改程序端口为5000。注Server与Shared和Client的NuGet包不一样Server是集成了服务端的一些功能修改program.csvar builder WebApplication.CreateBuilder(args); builder.Services.AddSingletonBankService(); builder.Services.AddActors(options {options.Actors.RegisterActorDemoActor(); });var app builder.Build();app.UseRouting();app.UseEndpoints(endpoints {endpoints.MapActorsHandlers(); });app.Run();添加BankService.csusing Assignment.Shared;namespace Assignment.Server; public class BankService {// Allow overdraft of up to 50 (of whatever currency).private readonly decimal OverdraftThreshold -50m;public decimal Withdraw(decimal balance, decimal amount){// Imagine putting some complex auditing logic here in addition to the basics.var updated balance - amount;if (updated OverdraftThreshold){throw new OverdraftException(balance, amount);}return updated;} }添加BankActor.csusing Assignment.Shared; using Dapr.Actors.Runtime; using System;namespace Assignment.Server; public class BankActor : Actor, IBankActor, IRemindable // IRemindable is not required {private readonly BankService bank;public BankActor(ActorHost host, BankService bank): base(host){// BankService is provided by dependency injection.// See Program.csthis.bank bank;}public async TaskAccountBalance GetAccountBalance(){var starting new AccountBalance(){AccountId this.Id.GetId(),Balance 10m, // Start new accounts with 100, were pretty generous.};var balance await StateManager.GetOrAddStateAsync(balance, starting);return balance;}public async Task Withdraw(WithdrawRequest withdraw){var starting new AccountBalance(){AccountId this.Id.GetId(),Balance 10m, // Start new accounts with 100, were pretty generous.};var balance await StateManager.GetOrAddStateAsync(balance, starting)!;if (balance.Balance 0){// Simulated reminder depositif (Random.Shared.Next(100) 90){await RegisterReminderAsync(Deposit, null, TimeSpan.FromSeconds(5), TimeSpan.FromMilliseconds(-1));}}// Throws Overdraft exception if the account doesnt have enough money.var updated this.bank.Withdraw(balance.Balance, withdraw.Amount);balance.Balance updated;await StateManager.SetStateAsync(balance, balance);}public async Task ReceiveReminderAsync(string reminderName, byte[] state, TimeSpan dueTime, TimeSpan period){if (reminderName Deposit){var balance await StateManager.GetStateAsyncAccountBalance(balance)!;if (balance.Balance 0){balance.Balance 60; // 50(Overdraft Threshold) 10 60Console.WriteLine(Deposit: 10);}else{Console.WriteLine(Deposit: ignore);}}} }运行Assignment.Server使用Dapr CLI来启动先使用命令行工具跳转到目录 dapr-study-room\Assignment07\Assignment.Server然后执行下面命令dapr run --app-id testactor --app-port 5000 --dapr-http-port 3500 --dapr-grpc-port 50001 dotnet run创建Assignment.Client创建控制台项目并添加Dapr.ActorsNuGet包引用和Assignment.Shared项目引用。修改Program.csusing Assignment.Shared; using Dapr.Actors; using Dapr.Actors.Client;Console.WriteLine(Creating a Bank Actor); var bank ActorProxy.CreateIBankActor(ActorId.CreateRandom(), BankActor); Parallel.ForEach(Enumerable.Range(1, 10), async i {while (true){var balance await bank.GetAccountBalance();Console.WriteLine($[Worker-{i}] Balance for account {balance.AccountId} is {balance.Balance:c}.);Console.WriteLine($[Worker-{i}] Withdrawing {1m:c}...);try{await bank.Withdraw(new WithdrawRequest() { Amount 1m });}catch (ActorMethodInvocationException ex){Console.WriteLine([Worker-{i}] Overdraft: ex.Message);}Task.Delay(1000).Wait();} });Console.ReadKey();运行Assignment.Client使用Dapr CLI来启动先使用命令行工具跳转到目录 dapr-study-room\Assignment07\Assignment.Client然后执行下面命令dotnet run本章源码Assignment07https://github.com/doddgu/dapr-study-room我们正在行动新的框架、新的生态我们的目标是自由的、易用的、可塑性强的、功能丰富的、健壮的。所以我们借鉴Building blocks的设计理念正在做一个新的框架MASA Framework它有哪些特点呢原生支持Dapr且允许将Dapr替换成传统通信方式架构不限单体应用、SOA、微服务都支持支持.Net原生框架降低学习负担除特定领域必须引入的概念坚持不造新轮子丰富的生态支持除了框架以外还有组件库、权限中心、配置中心、故障排查中心、报警中心等一系列产品核心代码库的单元测试覆盖率90%开源、免费、社区驱动还有什么我们在等你一起来讨论经过几个月的生产项目实践已完成POC目前正在把之前的积累重构到新的开源项目中目前源码已开始同步到Github文档站点在规划中会慢慢完善起来MASA.BuildingBlocksMASA.ContribMASA.UtilsMASA.EShopBlazorComponentMASA.BlazorQQ群7424099微信群加技术运营微信MasaStackTechOps备注来意邀请进群
http://wiki.neutronadmin.com/news/272115/

相关文章:

  • 平面设计网站首页公司网站制作需要多少钱
  • 成都营销型网站建设中账号手机站电影
  • 建设网站的意义作用是什么php网站开发怎么接私活
  • 仁怀企业网站建设科技论文
  • 网站建设与管理学校wordpress 滑动 评论
  • 网络建站如何建成小程序开发文档pdf
  • 网站热力图用ps怎么做网站ftp地址是什么
  • ps做网站导航条富阳区住房与建设局网站
  • 公司网站怎么建立优化体系手机制作游戏的软件
  • 一级a做爰片手机电影网站罗定网站建设
  • 专业的盐城网站开发运营推广计划
  • 深圳网站开发培训网站建设的潜规则
  • 企网站建设深圳送花网站哪个好
  • 购物网站建设新闻有哪些网站适合大学生做兼职
  • 跨境电商建站公司坊网站建设
  • 绿色网站风格软文代写文案
  • 做净化行业需要知道的网站怎么把WordPress和域名解绑
  • 企业网站怎么收录好的企业管理网站
  • h5网站制作接单网店出租网站程序
  • 东莞响应式网站ei网站怎么兼做
  • 水利建设专项收入在什么网站上申报wordpress页面添加自定义字段
  • 网站安全防护找谁做优化软件哪个好
  • 长春网站建设找新生科技做设计找素材的 网站有哪些
  • 做网站潍坊广告公司宣传语
  • 一个网站如何挣钱开源低代码平台
  • 福州网站设计公司移动开发是干什么的
  • 上饶建设网站局域网站点建设方案
  • 做网站整理信息的表格个人网页设计图片素材
  • 网站管理建站南昌seo全网营销
  • php mysql网站开发全程实例 下载网站常用的js效果