mcpField
F
foundatio

foundatio

github.com/exceptionless开发2.5k40 次安装今天更新
代码仓库

关于 foundatio

Foundatio 是面向 .NET 开发者的可插拔基础设施抽象库,涵盖缓存、队列、消息、存储、锁和作业。它同时提供内存实现与生产环境后端。

主要功能

  1. 01可插拔的缓存、队列和消息抽象
  2. 02内存及生产环境实现
  3. 03文件存储与分布式锁
  4. 04队列处理和定时作业
  5. 05支持重试与断路器的弹性策略

适用场景

  1. 01在测试和生产环境间切换基础设施实现
  2. 02排队并处理应用事件
  3. 03安排定期清理作业

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/exceptionless/exceptionless --skill foundatio

安装后在 Claude Code 中输入/foundatio确认已加载。

详细介绍

Foundatio

Foundatio 提供可插拔的基础设施抽象。使用 context7 MCP 获取完整文档。

文档: 使用 context7 获取最新的 Foundatio API 文档和示例。

核心抽象

接口用途内存中生产环境
ICacheClient分布式缓存InMemoryCacheClientRedis
IQueue<T>消息队列InMemoryQueue<T>Redis/SQS
IMessageBus发布/订阅消息InMemoryMessageBusRedis
IFileStorage文件存储InMemoryFileStorageS3/Azure
ILockProvider分布式锁InMemoryLockProviderRedis
IResiliencePolicyProvider重试/熔断不适用基于 Polly

ICacheClient

var result = await _cache.GetAsync<int>(key);
int value = result.HasValue ? result.Value : 0;

await _cache.IncrementAsync(key, count);
await _cache.ListAddAsync(setKey, organizationId);

IQueue<T>

await _queue.EnqueueAsync(new EventPost { OrganizationId = orgId, ProjectId = projectId, FilePath = path });

IMessageBus

// Subscribe
await _subscriber.SubscribeAsync<EntityChanged>(OnEntityChangedAsync, shutdownToken);

// Publish
await _messagePublisher.PublishAsync(new EntityChanged
{
    ChangeType = ChangeType.Saved, Type = nameof(Organization), Id = organization.Id
});

作业

QueueJobBase — 队列处理
[Job(Description = "Processes queued events.", InitialDelay = "2s")]
public class EventPostsJob : QueueJobBase<EventPost>
{
    public EventPostsJob(IQueue<EventPost> queue, TimeProvider timeProvider,
        IResiliencePolicyProvider resiliencePolicyProvider, ILoggerFactory loggerFactory)
        : base(queue, timeProvider, resiliencePolicyProvider, loggerFactory)
    {
        AutoComplete = false;
    }

    protected override async Task<JobResult> ProcessQueueEntryAsync(QueueEntryContext<EventPost> context)
    {
        var entry = context.QueueEntry;
        // Process the event...
        await entry.CompleteAsync();
        return JobResult.Success;
    }
}
IJob — 定时作业
[Job(Description = "Deletes old data.", InitialDelay = "1m", Interval = "1h")]
public class CleanupDataJob : IJob
{
    public async Task<JobResult> RunAsync(CancellationToken cancellationToken = default) { ... }
}
作业特性
特性用途示例
Description作业描述—
InitialDelay首次运行前的延迟"2s"
Interval运行频率"5m"
IterationLimit运行 N 次后停止1
IsContinuous持续运行true

弹性与可靠性

  • 预期会发生故障:网络调用可能失败、资源可能耗尽、并发访问可能发生竞争
  • 处处设置超时:绝不无限期等待;使用取消令牌
  • 带退避的重试:针对瞬时故障使用带抖动的指数退避
  • 优雅降级:在适当情况下返回缓存数据、默认值或部分结果
  • 幂等性:设计可安全重试的操作
  • 资源限制:限制队列、缓存和缓冲区的大小,以防内存耗尽

队列条目:调用 AbandonAsync() 进行重试,调用 CompleteAsync() 完成处理。不要重试验证错误——它们永远不会成功。

评论

支持 Markdown