Foundatio - .Net Core用于构建分布式应用程序的可插拔基础块

简介

Foundatio - 用于构建分布式应用程序的可插拔基础块

•想要针对抽象接口进行构建,以便我们可以轻松更改实现。希望这些块对依赖注入友好。•缓存:我们最初使用的是开源 Redis 缓存客户端,但后来它变成了具有高许可成本的商业产品。不仅如此,而且没有任何内存实现,因此每个开发人员都需要设置和配置 Redis。•消息总线:我们最初关注的是NServiceBus(伟大的产品),但它的许可成本很高(他们也必须吃),但对 OSS 不友好。我们还研究了MassTransit,但发现缺少 Azure 支持并且本地设置很麻烦。我们想要一个可以在本地或云中运行的简单消息总线。•存储:我们找不到任何在内存、文件存储或 Azure Blob 存储中解耦和支持的现有项目。

总而言之,如果您希望在允许应用扩展的同时进行无痛开发和测试,请使用 Foundatio!

使用

功能

•Caching•Queues•Locks•Messaging•Jobs•File Storage•Metrics

Caching

缓存允许您快速存储和访问数据,ICacheClient我们提供了四种不同的从接口派生的缓存实现:

•InMemoryCacheClient:内存缓存客户端实现。此缓存实现仅在进程的生命周期内有效•HybridCacheClient:此缓存实现同时使用 anICacheClient和 theInMemoryCacheClient并使用 anIMessageBus来保持缓存跨进程同步•RedisCacheClient:Redis 缓存客户端实现•RedisHybridCacheClient:HybridCacheClient使用RedisCacheClientasICacheClient和RedisMessageBusas的实现IMessageBus

-ScopedCacheClient:此缓存实现采用一个实例ICacheClient和一个字符串scope。范围是每个缓存键的前缀。这使得确定所有缓存键的范围并轻松删除它们变得非常容易。

using Foundatio.Caching;
ICacheClient cache = new InMemoryCacheClient();
await cache.SetAsync("test", 1);
var value = await cache.GetAsync<int>("test");

Queues

队列提供先进先出 (FIFO) 消息传递。IQueue我们提供了四种不同的从接口派生的队列实现:

•InMemoryQueue:内存队列实现。此队列实现仅在进程的生命周期内有效。•RedisQueue:一个 Redis 队列实现。•AzureServiceBusQueue:Azure 服务总线队列实现。•AzureStorageQueue:Azure 存储队列实现。•SQSQueue:AWS SQS 实施。

using Foundatio.Queues;IQueue<SimpleWorkItem> queue = new InMemoryQueue<SimpleWorkItem>();await queue.EnqueueAsync(new SimpleWorkItem {Data = "Hello"
});var workItem = await queue.DequeueAsync();

Locks

锁确保在任何给定时间只能由一个消费者访问资源。ILockProvider我们提供了两种从接口派生的不同锁定实现:

•CacheLockProvider:使用缓存在进程之间进行通信的锁实现。•ThrottlingLockProvider:一种只允许一定数量的锁通过的锁实现。您可以使用它来限制对某些外部服务的 api 调用,它会在所有请求该锁的进程中限制它们。•ScopedLockProvider:这个锁实现需要一个实例ILockProvider和一个字符串scope。范围是每个锁定键的前缀。这使得确定所有锁的范围并轻松释放它们变得非常容易。using Foundatio.Lock;
ILockProvider locker = new CacheLockProvider(new InMemoryCacheClient(), new InMemoryMessageBus());
var testLock = await locker.AcquireAsync("test");
// ...
await testLock.ReleaseAsync();
ILockProvider throttledLocker = new ThrottlingLockProvider(new InMemoryCacheClient(), 1, TimeSpan.FromMinutes(1));
var throttledLock = await throttledLocker.AcquireAsync("test");
// .
await throttledLock.ReleaseAsync();

Messaging

允许您发布和订阅流经您的应用程序的消息。IMessageBus我们提供了四种不同的从接口派生的消息总线实现:

•InMemoryMessageBus:内存消息总线实现。此消息总线实现仅在进程的生命周期内有效。•RedisMessageBus : Redis 消息总线实现。•RabbitMQMessageBus : RabbitMQ 实现。•AzureServiceBusMessageBus:Azure 服务总线实现。using Foundatio.Messaging;
IMessageBus messageBus = new InMemoryMessageBus();
await messageBus.SubscribeAsync<SimpleMessageA>(msg => {
// Got message
});
await messageBus.PublishAsync(new SimpleMessageA { Data = "Hello" });

Jobs

所有作业都必须从IJob接口派生。我们还有一个可以派生的JobBase基类,它提供 JobContext 和日志记录。然后,您可以通过调用RunAsync()作业或创建JobRunner类的实例并调用其中一个 Run 方法来运行作业。JobRunner 可用于轻松地将您的作业作为 Azure Web 作业运行。

using Foundatio.Jobs;
public class HelloWorldJob : JobBase {
public int RunCount { get; set; }
protected override Task<JobResult> RunInternalAsync(JobContext context) {
   RunCount++;
   return Task.FromResult(JobResult.Success);
}
}

File Storage

IFileStorage我们提供从接口派生的不同文件存储实现:

•InMemoryFileStorage:内存文件实现。此文件存储实现仅在进程的生命周期内有效。•FolderFileStorage:使用硬盘驱动器进行存储的文件存储实现。•AzureFileStorage:Azure Blob 存储实现。•S3FileStorage:AWS S3 文件存储实现。•RedisFileStorage : Redis 文件存储实现。•MinioFileStorage Minio文件存储实现。•AliyunFileStorage : 一个阿里云文件存储实现。•SshNetFileStorage:一个 SFTP 文件存储实现。   using Foundatio.Storage;
IFileStorage storage = new InMemoryFileStorage();
await storage.SaveFileAsync("test.txt", "test");
string content = await storage.GetFileContentsAsync("test.txt")

Metrics

IMetricsClient我们提供了五个从接口派生的实现:

•InMemoryMetricsClient:内存中的指标实现。•RedisMetricsClient:一个 Redis 指标实现。•StatsDMetricsClient:一个 statsd 指标实现。•MetricsNETClient:一个Metrics.NET实现。•AppMetricsClient:一个AppMetrics实现。•CloudWatchMetricsClient:AWS CloudWatch实施。IMetricsClient metrics = new InMemoryMetricsClient();
metrics.Counter("c1");
metrics.Gauge("g1", 2.534);
metrics.Timer("t1", 50788);

Github地址

https://github.com/FoundatioFx/Foundatio 最后大家如果喜欢我的文章,还麻烦给个关注并点个赞, 希望net生态圈越来越好!

c46529ffdc75101e3ab19c19d5e8045b.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289444.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开讲啦观后感2017计算机科学家,开讲啦观后感2017

1 开讲啦观后感2017(一)是因为有爱&#xff0c;我才付出的&#xff0c;因为是我爱的&#xff0c;而我又付出了&#xff0c;所以我会更爱。这是郑教授的演讲《你为什么读大学》中给我映像最深刻的一句话。我也能从这句话中找到我读大学的原因因为我爱。古时候说你十年寒窗苦读&a…

php 解压zip

2019独角兽企业重金招聘Python工程师标准>>> /*** 解压zip* param type $file* param type $destination* return boolean*/public function unzip_file($file, $destination){ $zip new ZipArchive() ; if ($zip->open($file) ! TRUE) {return $this->error…

如何评价国内SRC纷纷上线“白帽子协议”?

2017年6月1日21:21分 某监狱里&#xff0c;对话如下&#xff1a; 犯人A:你们都是怎么来的&#xff1f; 犯人B:我是XX漏洞平台挖漏洞不小心进来的。 犯人C:我是XX平台路人甲&#xff0c;输错命令了rm -rf / &#xff08;批量删除&#xff09; 犯人D:我是某测评中心的忘了要授权了…

SQL Server数据库备份的镜像

SQL Server数据库备份的镜像 原文:SQL Server数据库备份的镜像SQL Server数据库备份的镜像 一个完整备份可以分开镜像 USE master GOBACKUP DATABASE [testdatabase] TO DISK NC:\testdatabase1.bak MIRROR TO DISK ND:\testdatabase2.bak WITH FORMAT, INIT GO 一个完整备份…

C# 观察文件的更改

使用 FileSystemWatcher 可以监视文件的更改。事件在创建、重命名、删除和更改文件时触发。这可用于如下场景&#xff1a;需要对文件的变更做出反应&#xff0c;例如&#xff0c;服务器上传文件时&#xff0c;或文件缓存在内存中&#xff0c;而缓存需要在文件更改时失效。因为 …

php 自动创建目录

2019独角兽企业重金招聘Python工程师标准>>> /*** 创建目录* param type $path* param type $mode* return type */public function rmkdir($path, $mode 0777) {return is_dir($path) || ( $this->rmkdir(dirname($path), $mode) && $this->_mkdir(…

油管螺纹尺寸对照表_yt15硬质合金刀片尺寸|A320焊接刀头参数

硬质合金刀片牌号表示方法如下图&#xff1a;yw1硬质合金刀片a320钨钛钴类硬质合金主要成分是碳化钨、碳化钛(TiC)及钴。其牌号由“YT”(“硬、钛”两字汉语拼音字首)和碳化钛平均含量组成。例如&#xff0c;YT15&#xff0c;表示平均碳化钛(TiC)15%&#xff0c;其余为碳化钨和…

python实验原理_Python实验报告八

安徽工程大学Python程序设计 班级&#xff1a;物流192 姓名&#xff1a;唐家豪 学号&#xff1a;3190505234 成绩&#xff1a; 日期&#xff1a;2020/06/03 指导老师&#xff1a;修宇 【实验目的】 &#xff1a; 掌握读写文本文件或 CSV 文件&#xff0c;进而对数据进行处理的方…

.NET 6 使用 Obfuscar 进行代码混淆

本文来安利大家 Obfuscar 这个好用的基于 MIT 协议开源的混淆工具。这是一个非常老牌的混淆工具&#xff0c;从 2014 年就对外分发&#xff0c;如今已有累计 495.5K 的 nuget 下载量。而且此工具也在不断持续迭代更新&#xff0c;完全支持 dotnet 6 版本&#xff0c;对 WPF 和 …

springmvc 传对象报400_那么火的SpringMVC到底有什么过人之处呢

先简单聊聊SpringMVC如果你们玩知乎&#xff0c;很可能会看到我的身影。我经常会去知乎水回答。在知乎有很多初学者都会问的一个问题&#xff1a;「我学习SpringMVC需要什么样的基础」我一定会让他们先学Servlet&#xff0c;再学SpringMVC的。虽然说我们在现实开发中几乎不会写…

matlab cftool代码_Matlab工具箱之拟合算法

和插值算法相比&#xff0c;拟合算法的优势在于拟合曲线不需要经过所有样本点&#xff0c;所以能降低函数的复杂程度。我们可以通过观察散点图目测拟合函数的大致形式&#xff0c;然后用最小二乘法计算待估参数。这时候Matlab就能发挥作用了&#xff0c;因为它提供了非常强大的…

WPF效果第一百七十八篇ItemsControl旋转

在前面分享的几篇中咱已经玩耍了Popup、ListBox多选、Grid动态分、RadioButton模板、控件的拖放效果、控件的置顶和置底、控件的锁定、自定义Window样式、动画效果、Expander控件、ListBox折叠列表、聊天窗口、ListBox图片消息、窗口抖动、语音发送、语音播放、语音播放问题、玩…

结对开发Ⅴ——循环一维数组求和最大的子数组

一、设计思路 &#xff08;1&#xff09;数据的存储结构是链表&#xff0c;最后一个结点的next指向第一个元素的结点&#xff1b; &#xff08;2&#xff09;数据个数为n&#xff0c;则最多有n*(n(n-1)...1)种情况&#xff08;包括重复&#xff09;&#xff1b; &#xff08;3&…

微软 MVP 福利大赏

前言成为微软 MVP 后, 可以获得微软提供的诸多福利。那具体有哪些福利呢&#xff1f;让我们一起来看看。行政表彰信行政表彰信宣布你的 MVP 身份&#xff0c;并恭祝你对技术社区的贡献。同时&#xff0c;概述了 MVP 项目的影响和意义。可以设置为 PDF 下载&#xff0c;也可以选…

canoco5主成分分析步骤_R语言 PCA主成分分析

微信公众号&#xff1a;生信小知识关注可了解更多的教程及生信知识。问题或建议&#xff0c;请公众号留言;R语言 PCA主成分分析前言统计学背景知识协方差相关系数函数总结实例讲解1.载入原始数据2.作主成分分析3.结果解读4.画主成分的碎石图并预测5.PCA结果绘制后记前言PCA分析…

物理专线流量平滑切换

在从传统IDC向云上迁移过程中&#xff0c;物理专线作为连接云上和云下的桥梁&#xff0c;在混合云架构中占有绝对重要的地位。作为基础设施&#xff0c;在伴随业务不断发展的过程当中&#xff0c;也会进行相应的更换升级。本文将介绍在物理专线特定情况下进行流量切换时&#x…

怎么实现动态设置静态文件存储目录?

前言文章名字有点绕口&#xff0c;举例说明一下&#xff1a;多用户使用同一个网站上传文件&#xff0c;但是因为一些原因&#xff0c;文件需要存储到服务器的不同目录下。比如用户 A 对应 c:\abc&#xff0c;用户 B 对应 d:\xyz\123。并且&#xff0c;文件需要以静态文件方式提…

编写函数判断一个数是否是回文数_程序员面试金典 - 面试题 01.04. 回文排列

题目难度: 简单原题链接 题目描述给定一个字符串&#xff0c;编写一个函数判定其是否为某个回文串的排列之一。回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。回文串不一定是字典当中的单词。示例 1&#xff1a;输入&#xff1a;"tactcoa" 输出…

Facebook为Messenger应用添加群组付款功能

Facebook在2015年为Messenger应用添加了好友免费转账功能。这个使得用户可以方便安全地向朋友转账&#xff0c;但是如果用户需要向多人支付&#xff0c;可能会耗费时间。幸运的是&#xff0c;Facebook已经通过其最新的Messenger应用更新解决了这个缺点。扩展付款功能现在允许用…

Xamarin.Forms 5.0 项目实战发布!

活动介绍本次活动主要是 .NET Xamarin.Forms 移动端项目开发实战教程, 与以往相同, 本次的收入(其它部分会另行说明) 将用于社区公益活动, 不限于:公益性质的个人/组织机构捐赠开源社区个人/项目捐赠内部投票活动本次的活动费用为:399元, 相对于去年组织的WPF公益实战视频而言,…