创建一个简单的数据模型 我们使用 IDE 打开刚刚创建的项目,添加一个简单的数据模型类 OrderInfo : public class OrderInfo{ public int OrderId...我们在 Program.cs 中添加以下代码来完成这些逻辑: new 一个 OrderInfo order 使用 StringBuilder 将 order 的所有属性名称和值拼接在一起 输出最后的...首先,使用 Object Visitor 可以动态的适应模型类的变化,这点好处非常明显。 当 OrderInfo 中的属性增加时,“拼接部分” 的代码可以不用变化,实现动态的适配。...另外,还有一些好处是本示例没有体现的,将会在后续的文档中进行介绍: 它的运行效率很高。根据已有的基准测试,其性能表征和直接硬编码差距很小。...使用反射来实现以上的效果也是可以的,但相较来说,Object Visitor 的实现方式在性能方面根据优势: 根据已有的基准测试,Object Visitor 基于表达式树实现,其运行效率要比直接使用反射相关的读写方法高出许多
dotnet tool update newbe.mcrmirror -g 拉取国内服务器上的镜像 加速的本质是因为我将镜像推送到了国内的服务器,目前在以下服务器均存在镜像: 阿里云 registry.cn-hangzhou.aliyuncs.com...使用 DockerHub 加速器 我也将镜像推送到了 dockerhub ,所以正常来说,在中国大陆使用 dockerhub 加速器也可以达到加速的效果。...但是,在中国大陆从 MCR 上拉取镜像简直慢得让人发指。 MCR 团队已经决定尝试一些方案为此提速,相关的讨论罗列在这个issue中。我也将会持续跟踪这个issue。...代码仓库 docker-mcr 以及 Github Action 相关的代码都在以下仓库中,如果您在使用中遇到了任何问题,可以通过 issue 进行反馈: Github: https://github.com...希望为开发者提供能够便于开发出“分布式”、“可水平扩展”、“可测试性高”的应用系统——Newbe.Claptrap 此次的加速工具实际上是笔者在编写样例时遇到下载困难时编写的工具。
若要查看最新的开发文档,请移步 https://claptrap.newbe.pro 开篇摘要 本篇,我通过实现“管理库存”的需求来了解一下如何在已有的项目样例中定义一个 Claptrap。...定义 ClaptrapTypeCode ClaptrapTypeCode 是一个 Claptrap 的唯一编码。其在 State 的识别,序列化等方面起到了重要的作用。...由于 Claptrap 是基于事件溯源模式的 Actor。因此定义恰好的 State 非常重要。 在该示例当中,我们只需要记录当前 SKU 的库存即可,因此,State 的设计非常的简单。...EventCode 是 Claptrap 系统每个事件的唯一编码。其在事件的识别,序列化等方面起到了重要的作用。 打开HelloClaptrap.Models项目中的ClaptrapCodes类。...此处没有创建更新库存的对外 API,因为本示例将在下篇进行下单购物时进行库存操作,此处暂不需要 API。 小结 至此,我们就完成了“管理商品库存”这个简单需求的所有内容。
定义 ClaptrapTypeCode ClaptrapTypeCode 是一个 Claptrap 的唯一编码。其在 State 的识别,序列化等方面起到了重要的作用。...由于 Claptrap 是基于事件溯源模式的 Actor。因此定义恰好的 State 非常重要。 在该示例当中,我们只需要记录当前 SKU 的库存即可,因此,State 的设计非常的简单。...由于示例代码采用的是程序集范围内扫描,因此实际上不需要进行修改。 这里指出发生注册的位置: 打开 HelloClaptrap.BackendServer 项目的 Program 类。...EventCode 是 Claptrap 系统每个事件的唯一编码。其在事件的识别,序列化等方面起到了重要的作用。...此处没有创建更新库存的对外 API,因为本示例将在下篇进行下单购物时进行库存操作,此处暂不需要 API。 小结 至此,我们就完成了 “管理商品库存” 这个简单需求的所有内容。
本示例将会使用”嘤鹉学舌”这个小插件的实现来演示如何使用Newbe.Mahua实现第一个机器人插件。 入坑提示 建议开发者先根据自身需求结合表格,选择属于自己的专属开发框架,避免浪费时间。...编写一套代码就能在多个平台运行 支持使用除了C#之外的开发语言来开发 我希望他足够简单,不用学习太多就能掌握,通常只需要半个小时就能掌握所有内容 我希望社区的反馈足够快,有问题都可以帮我解决 SDK名称...,需自行解决) Visual Studio Code Rider(Newbe更加推荐) 设置Powershell执行策略限制 简单来说,使用管理员权限在cmd中运行以下命令: powershell -command...该插件实现将好友的私聊消息回发给好友的功能。"; } } 添加”接收好友消息事件”代码实现 新建出来的项目中包含一个 ItemTemplate 文件夹,里面包含了所有需要的项模板。...复制文件到机器人平台 在bin目录下会按照当前安装的平台生成相应的目录。本示例将会生成CQP、Amanda和MPQ三个目录。 分别将三个文件夹下的所有文件和文件夹都复制到对应的机器人平台根目录。
软硬条件 名 值 IDE VS2017.5 Newbe.Mahua 1.11 项目基础 在阅读本教程之前,想必开发者已经学会了如何插件插件项目。因此本节只将本示例使用的关键参数和代码贴出。...绝对没有月落的意思 其他注意点 开始热更新事件 IPluginHotUpgradingMahuaEvent 开发者可以订阅”开始热更新事件”,在插件开始热更新时进行一些操作。...以下便是一个订阅的例子,该示例将允许在奇数秒进行热更新,偶数秒阻止热更新: using Newbe.Mahua.MahuaEvents; using System; namespace Newbe.Mahua.Samples.HotUpdate.MahuaEvents...同时,在热更新成功之后,也将再次触发此事件。 热更新过程中的消息 热更新开始后,将会将后续接收的所有的消息进行暂存,在热更新成功之后发送后热更新之后的插件进行处理。...示例代码 本教程中的所有示例代码,都可以在以下链接获取: https://github.com/newbe36524/Newbe.Mahua.Framework/tree/master/src/Newbe.Mahua.Samples.HotUpdate
发布了 1.10 版本,为开发者带来了完整的 Amanda 平台开发体验,一时间引起了热议。...因此本框架仅仅被定义为一个”用于开发插件的 SDK”,插件必须依附于这些 QQ 机器人平台才能运行,并且在 API 能力上也受限于特定的机器人平台。...Newbe.Mahua 框架,或者说 QQ 机器人插件的开发是一个相对不要求界面制作技术的领域,首先这可以让我和参与项目的开发者把目光聚焦在我所说的”学会学习”上。...而社区的意义在于让其中的开发者,能够在项目过程中,在一步步解决诸如”如何一套接口对接多个平台”、”如何制作简单的 IDE 插件”、”如何实现非托管代码与托管代码的调用”等问题的过程中,学习到开发的各种工具...还有更多的社区开发者,他们热心解答他人的技术疑问。 其中有一件事让我印象深刻,它也让我看到了这个社区的整体性,大家为了同一个目标在集思广益。 当时我们是被的问题困扰住了。
本示例将会使用”嘤鹉学舌”这个小插件的实现来演示如何使用Newbe.Mahua实现第一个机器人插件。 插件功能 自动将发送者的消息回发给发送人,嘤鹉(Parrot,其实是说嘤嘤嘤怪)学舌。...3.0及以上 设置Powershell执行策略限制 参考链接:http://www.pstips.net/powershell-create-and-start-scripts.html 简单来说,使用管理员权限在...新建项目 项目名称至少需要包含三部分,形如AAA.BBB.CCC的形式。 新建项目时,可以根据”希望支持的插件平台”来选择特定后缀的项目模板来安装。...该插件实现将好友的私聊消息回发给好友的功能。"; } } 添加”接收好友消息事件”代码实现 在MahuaEvents处右键,选择”添加->新建项”。...复制文件到机器人平台 在bin目录下会按照当前安装的平台生成相应的目录。本示例将会生成CQP、Amanda和MPQ三个目录。 分别将三个文件夹下的所有文件和文件夹都复制到对应的机器人平台根目录。
本示例将会使用”鹦鹉学舌”这个小插件的实现来演示如何使用Newbe.Mahua实现第一个机器人插件。 插件功能 自动将发送者的消息回发给发送人,鹦鹉(英文:Parrot)学舌。...3.0及以上 设置Powershell执行策略限制 参考链接:http://www.pstips.net/powershell-create-and-start-scripts.html 简单来说,使用管理员权限在...新建项目 项目名称至少需要包含三部分,形如AAA.BBB.CCC的形式。 新建项目时,可以根据”希望支持的插件平台”来选择特定后缀的项目模板来安装。...该插件实现将好友的私聊消息回发给好友的功能。"; } } 添加”接收好友消息事件”代码实现 在MahuaEvents处右键,选择”添加->新建项”。...复制文件到机器人平台 在bin目录下会按照当前安装的平台生成相应的目录。本示例将会生成CQP、Amanda和MPQ三个目录。 分别将三个目录中的文件复制到对应的机器人平台根目录。
部署 Nginx 本示例,我们部署一个 nginx ,并且通过将服务公开在一个公网地址上。 登录并创建实例 这一步非常简单,不多说明,成功创建完成之后便可以看到如下所示的界面。...拉取镜像 运行以下命令,便可以拉取最新的 nginx 镜像。 docker pull nginx 拉取速度非常快速,因为这个实例节点是部署在国外的,因此无需设置镜像也可以极速下载。...,界面上会自动出现一个新的按钮,表示当前可以已经部署成功的公网地址,如下图所示: 点击按钮便可以在浏览器中访问刚刚部署成功的 nginx 服务。...如果生成按钮,也可以点击 “OPEN PORT” 来选择开放的端口。 部署火车票售票系统 如果只是部署一个简单的 nginx 显然不够快乐。因此,我来部署一个稍微复杂一点的系统。...这是一个由 7 个容器构成的演示系统,参考《火车票售票系统 - 部署》的说明,运行以下命令来启动一个模拟的火车票售票系统: git clone https://github.com/newbe36524
但是,假如读者希望先了解本项目的功能效果,读者可以先阅读《Newbe.Pct 开始使用)》 操作系统 本项目基于Java与NodeJs运行。...Java环境的安装,可以参考以下文章: http://www.runoob.com/java/java-environment-setup.html 对于初学者需要特别注意的是:以上链接中提到了Java...其中IDE的安装是本项目所不需要的,注意甄别。 作者编写此文章时,所使用的Java版本为 x64 1.8.0_112。建议至少安装同版本或更高版本以便能够正常运行示例中的内容。...建议至少安装同版本或更高版本以便能够正常运行示例中的内容。 安装与设置 webdriver-manager webdriver-manager 作为本项目的浏览器驱动引擎,是非常关键的一项内容。...由于众所周知的原因,在大陆访问该站点时,会出现无法下载的情况,导致这一步失败。
虽然可以运行,但是运行效率会降低。原来登录可能只需要 100 ms。使用到虚拟内存的用户则需要 2 s。 因此,速度降低的情况下,在验证需要多少内存意义可能不大。...可以参看这篇文档进行设置 源码构建 使用控制台进入 src/Newbe.Claptrap.Auth 文件夹。运行以下命令便可以在本地完成代码的构建: 1 2 ....运行以下命令便可以启动相关的容器: 1 docker-compose up -d 常见问题解答 文中为何没有说明代码和配置的细节?...当然,另外一点就是目前框架没有最终定版,所有内容都有可能发生变化,讲解代码细节意义不大。 但可以提前说明的是:编写非常简单,由于本样例的业务需求非常简单,因此代码内容也不多。...全部都可以在示例仓库中找到。 用 Redis 存储 Token 也可以实现上面的需求,为什么要选择这个框架?
建议可以先从本文末尾的入门文章开始了解。 必不可少的日志管理 对应用进行日志记录和分析是诊断排查线上问题的重要手段。而简单基于控制台或者文件的直接记录既不利于开发者直接读取也不利于大规模分析。...打开 seq 便可以看到 seq 的查询界面: 使用浏览器调用一下 swagger 界面中的 API。便可以在 seq 中查看到最新的日志。 这便是使用 seq 最简单的一种方式。...我不想每次都重新部署 Seq 我们都知道, Tye 在停止运行时会尝试停止此次所有部署的容器,Seq 也是以容器的方式运行,因此,每次停止 Tye 时,容器都会被自动移除。...实际上,根据 Tye 中的代码,如果服务中已经存在一个名称为 seq 的服务,那么就会自动使用该服务,而跳过创建步骤。...添加了一个名为 seq 的服务,其中 external: true 指定了其为一个外部服务。故而启动时不会尝试去创建这个服务。 这样使用 tye run 启动后得到的结果和先前效果是一致的。
在容器中每次获取同一个接口的实现,每次获取到的都是不同的实例。读者可以翻阅一下先前的示例代码回顾一下。 单例模式 单例模式也是一种常见的设计模式,这种设计模式。...简单来说,这段代码的运行结果会随着时间的变化而变化,每次运行的结果都不相同,这样通常来说是不可测的。因此,应用依赖注入进行一下改造。...读者可以将上文代码中的SingleInstance代码去掉来体验单例和非单例运行结果的区别。 生命周期内单例 上文的单例是一种全局性的单例配置。只要容器建立起来,在容器内就是完全单例的。...以上代码的关键点: 在注册ILogger时,注册为了生命周期内单例。 在获取IAccountBll时,开启了一个生命周期,那么在这个生命周期内获取的ILogger实例都是同一个。...总结 在使用依赖注入的时候,生命周期控制是一个相当重要的课题。读者需要在实践中注意分析。 以上示例代码都是基于较为简单的业务场景与基础代码实现,实际操作中不一定是如此,读者需要在实践中注意分析。
版本亮点 支持 Rider 创建项目 更新后的Newbe.Mahua.Template项目模板,将支持在Rider IDE中直接使用。 ?...示例代码如下 _mahuaApi.SendPrivateMessage("10086").Record("D:\666.mp3").Done(); 移除了对 Newbe.Build.Psake 的依赖...避免用户在升级过程中容易出现构建脚本被覆盖的问题。...在已有项目上进行升级时,需要开发者手动按照以下操作移除相关的包: 卸载 Newbe.Mahua.Tools.Psake 卸载 Newbe.Build.Psake 安装 Newbe.Mahua.Tools.Psake...更新项目模板,只需在控制台中运行以下命令即可: dotnet new -i Newbe.Mahua.Template 教程链接 Newbe.Mahua 1.X 主要特性介绍与常见问题讲解 开始第一个QQ
在 Newbe.ObjectVistor 0.3 版本中我们非常兴奋的引入了一个紧张刺激的新特性:使用状态图来生成任意给定的 FluentAPI 设计。...开篇摘要 在非常多优秀的框架中都存在一部分 FluentAPI 的设计。这种 API 设计更加符合人类自言语言描述。使得代码更加具备可读性。...在 Newbe.ObjectVistor 0.3 版本中,我们设计引入了一种使用状态图来自动生成 FluentAPI 代码的机制。极大了简化了 FluentAPI 实现所需要的脑力劳动。...示例的调用代码如下: [Test] public void MultipleSumList() { var builder = new MultipleSumBuilder(new List<List...0.1.4 发布,初始版本 使用样例 Newbe.ObjectVisitor 样例 1 番外分享 寻找性能更优秀的动态 Getter 和 Setter 方案 寻找性能更优秀的不可变小字典 我画着图,FluentAPI
建议可以先从本文末尾的入门文章开始了解。 我是谁?我在哪儿?我咋了? 分布式系统纷繁复杂,特别以现在微服务架构的出现,使得应用系统中的应用实例变得更加多变难以捉摸。...httpResponseMessage.Content.ReadAsStringAsync(); return json; } } } 这样,我们就得到了一个在服务...TyeTest 中调用 TyeTest2 的一个服务间调用的示例。...这其实和 使用 Tye 辅助开发 k8s 应用竟如此简单(二) 中得到的测试用例是相同的。 然后使用 tye run 便可以启用测试应用。开发者可以在 swagger 页面中测试具体的效果。 但是!...然后在回来查询,便可以查询到服务调用的情况: 点击其中的 Show 按钮,便可以查看到一次服务调用的详细过程信息: 这就是使用 zipkin 对 http 调用进行追踪的最简易示例。
透过这个抽象层,开发者可以节约很多基础设施上所需要投入的精力,进一步得到自我解放。 安装 Dapr runtime 为了在开发环境运行 dapr runtime。...需要先在开发机上进行一些简单的安装。...tye run,便可以在 tye dashboard 中查看成功运行的服务实例和 dapr 实例: 使用 swagger 页面,可以正常的访问服务。...,然后在文件夹中运行以下命令以创建项目: new.sh dotnet new newbe.claptrap --name HelloClaptrap 部署辅助组件 新建好的项目中存在一个 docker-compose.yml...本系列所有测试代码,均可以在以下仓库查看: https://github.com/newbe36524/Newbe.Demo/tree/master/src/BlogDemos/Newbe.Tye 最后但是最重要
让我们来实现一个简单的 “电商购物车” 需求来了解一下如何使用 Newbe.Claptrap 进行开发。...SDK 安装完毕后,打开控制台运行以下命令来安装最新的项目模板: dotnet new --install Newbe.Claptrap.Template 安装完毕后,可以在安装结果中查看到已经安装的项目模板...创建项目 选择一个位置,创建一个文件夹,本示例选择在 D:\Repo 下创建一个名为 HelloClaptrap 的文件夹。该文件夹将会作为新项目的代码文件夹。...SkuId = skuId, }); await Claptrap.HandleEventAsync(evt); return StateData.Items; } 此时,代码已经运行到了一个具体的购物车对象...我们按照业务需求,判断状态中的字典是否包含 SkuId,并对其数量进行更新。 继续调试,代码将会运行到这段代码的结尾。
掌握单元测试的技能,将会在使用Newbe.Mahua进行开发时无往不利的成功秘诀。 本教程将使用VS2017作为开发IDE进行演示。 新建测试项目 ?...在新建的测试项目”Newbe.Mahua.Plugins.Parrot.Tests”中新建一个类”ParrotTest”,并填写以下代码: using Autofac.Extras.Moq; using...运行测试代码 ? 来吧!真正的勇士,就绿了它们! 需求变化 需求变了,只有消息当中有”收到回复”这个字符串,那么才需要回发,并且要删除其中的”收到回复”字符串。...单元测试只要Newbe.Mahua提供的接口稳定,自己的业务逻辑没有变化,那么你的业务逻辑就永远能够通过单元测试。也就是说,这段代码就是为了确保你有底气说出:”我的代码不可能出错!”...以上演示代码,均可以在本项目代码仓库中找到。 调试 单元测试是开发阶段最初的测试,但事实是,绝大多数的人更喜欢”跑一下看看”。因此调试,也就很有必要。
领取专属 10元无门槛券
手把手带您无忧上云