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

前言在互联网时代,分布式应用、系统变得越来越多,我们在使用 .Net 技术构建分布式系统的时候,需要使用到一些组件或者是助手库来帮助我们提高生产力以及应用程序解耦,但是纵观.Net圈,能够符合要求的这样的组件并不是 很多,并且没有一个通用的抽象组件能够将这些接口集成起来,今天就为大家介绍一款开源的组件库 Foundatio,他们同样出自于Exceptionless团队之手,下面就来看看吧。目录Foundatio 介绍Getting Started缓存队列锁消息工作任务文件存储度量日志示例程序源码总结Foundatio 介绍GitHub : https://github.com/exceptionless/FoundatioFoundatio 是一个插件式的,松耦合的一套构建分布式应用的程序库,出自于Exceptionless团队。Foundatio 同时支持 .NET Framework 4.6 和 .NET Core。通过 Foundatio 我可以获得哪些帮助呢?如果你是面对接口(抽象)构建的程序,你可以很容易的对接口实现进行切换。具有友好的依赖注入,还在使用 .Net Framework的朋友可以体验一下,它具有比Autofac,Unity等更简易的操作和更友好的接口。可以更加方便的使用缓存了,Foundatio帮助我们封装了很多缓存的客户端实现,比如RedisCache、InMemoryCache、ScopedCache等等。消息总线,你不必自己构建或者使用复杂且昂贵的NServiceBus了,很多时候我们仅仅需要的是一个可以在本地或者云上运行的简单的消息总线。存储,现在你可以很方便的通过一致的接口来使用分布式存储了,包括内存文件存储、文件夹文件存储,Azure文件存储,AWS S3文件存储。Foundatio 主要包含以下模缓存(Caching)队列(Queues)锁(Locks)消息(Messaging)工作任务(Jobs)文件存储(File Storage)度量(Metrics)日志(Logging)这些组件都以NuGet包的形式提供出来供我们很方便的使用,下面依次来看看每一个组件的用途和使用方法吧。Getting Started缓存缓存是一种空间换时间的技术,你可以通过缓存来快速的获取一些数据。Foundatio Cache 提供了一致的接口ICacheClient 来很容易的存储或者读取缓存数据,并且提供了4中不同的缓存客户端的实现。他们分别是:1、InMemoryCacheClient:内存缓存的实现,这种缓存的生命周期为当前进程, 有一个MaxItems属性,可以设置最多缓存多少条数据。2、HybridCacheClient:InMemoryCacheClient 具有相同的实现,但是此接口提供、IMessageBus 可以用来跨线程之间的同步。3、RedisCacheClient:一个 Redis 客户端的实现。4、RedisHybridCacheClient:一个RedisCacheClient 、InMemoryCacheClient 的混合实现,通过RedisMessageBus来保持内存缓存跨线程之间的同步。注意:如果本地缓存的项已经存在,在调用Redis进行序列化保存的时候可能会有性能问题。5、ScopedCacheClient:传入ICacheClient和scope,scope 可以设置一个字符串,来制定一个缓存键前缀,这样可以很方便的进行批量存储和删除。例子:using Foundatio.Caching; ICacheClient cache = new InMemoryCacheClient(); await cache.SetAsync("test", 1); var value = await cache.GetAsync("test");队列提供了一个先进,先出的消息管道,Foundatio 提供了一个IQueue接口,并且拥有 4 种不同的队列实现。1、InMemoryQueue:一个内存队列实现,队列的生命周期为当前进程。2、RedisQueue:一个 Redis 队列实现。3、AzureServiceBusQueue:一个基于Azure的服务消息队列实现。4、AzureStorageQueue:一个基于Azure的存储队列实现。例子:using Foundatio.Queues; IQueue queue = new InMemoryQueue();await queue.EnqueueAsync(new SimpleWorkItem {     Data = "Hello"});var
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值