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
IMessageBusPub/Sub メッセージングInMemoryMessageBusRedis
IFileStorageファイルストレージInMemoryFileStorageS3/Azure
ILockProvider分散ロックInMemoryLockProviderRedis
IResiliencePolicyProvider再試行/サーキットブレーカーN/APolly ベース

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"
IterationLimitN 回実行後に停止1
IsContinuous実行を継続true

回復性と信頼性

  • 障害を想定する:ネットワーク呼び出しは失敗し、リソースは枯渇し、並行アクセスでは競合が発生します
  • あらゆる処理にタイムアウトを設定する:無期限に待機せず、キャンセルトークンを使用してください
  • バックオフを伴う再試行:一時的な障害には、ジッターを加えた指数バックオフを使用してください
  • 段階的な縮退:適切な場合は、キャッシュデータ、デフォルト値、または部分的な結果を返してください
  • 冪等性:安全に再試行できるように操作を設計してください
  • リソース制限:メモリ枯渇を防ぐため、キュー、キャッシュ、バッファーに上限を設けてください

キューエントリーでは、再試行するには AbandonAsync() を、完了するには CompleteAsync() を呼び出します。検証エラーは再試行しないでください。成功することはありません。

コメント