У меня есть обработчик сообщений, который накапливает сообщения в MemoryCache в течение заданного времени, так что будет обрабатываться только последний.Rebus - Bus с пересылкой sql в обратном вызове MemoryCache
Когда происходит обратный вызов, я хочу переслать другое сообщение обработчику, используя 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