1
メッセージキャッシュにメッセージを蓄積して、最後のメッセージのみが処理されるようにしました。Rebus - MemoryCacheコールバックでSQLトランスポートを使用するバス
コールバックが発生したとき、私はsqlトランスポートを使用して別のメッセージをハンドラに転送したいが、今度はsql接続が閉じられている。
コードは次のようなものになります。
public IBus SqlBus { get; set; }
public async Task Handle(ServiceMessage message)
{
await base.Handle(() =>
{
cache.Set(CacheKey, message, new CacheItemPolicy()
{
AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(10),
RemovedCallback = new CacheEntryRemovedCallback(CacheCallback),
});
return Task.FromResult(0);
}, message);
}
private void CacheCallback(CacheEntryRemovedArguments arguments)
{
if (arguments.RemovedReason == CacheEntryRemovedReason.Expired)
{
var message = arguments.CacheItem.Value as ServiceMessage;
SqlBus.Send(new AnotherMessage()).GetAwaiter().GetResult();
}
}
を私はこれを行うことができます任意のアプローチがありますか?
CacheCallbackは、有効期限が切れたとき、またはSystem.Runtime.Caching.MemoryCacheに別のメッセージが挿入されたときに呼び出されます。それは別のスレッドで呼び出されます。 – Daniel
どのスレッドですか?それはどこから来たのですか? – mookid8000
ワーカースレッド、私はMemoryCacheの内部動作を知らない:S – Daniel