// Copyright (c) Umbraco. // See LICENSE for more details. using Microsoft.Extensions.Logging; using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.Sync; using Umbraco.Core.Persistence; namespace Umbraco.Cms.Core.Cache { /// /// Ensures that distributed cache events are setup and the is initialized /// public sealed class DatabaseServerMessengerNotificationHandler : INotificationHandler, INotificationHandler { private readonly IServerMessenger _messenger; private readonly IUmbracoDatabaseFactory _databaseFactory; private readonly IDistributedCacheBinder _distributedCacheBinder; private readonly ILogger _logger; /// /// Initializes a new instance of the class. /// public DatabaseServerMessengerNotificationHandler( IServerMessenger serverMessenger, IUmbracoDatabaseFactory databaseFactory, IDistributedCacheBinder distributedCacheBinder, ILogger logger) { _databaseFactory = databaseFactory; _distributedCacheBinder = distributedCacheBinder; _logger = logger; _messenger = serverMessenger; } /// public void Handle(UmbracoApplicationStarting notification) { if (_databaseFactory.CanConnect == false) { _logger.LogWarning("Cannot connect to the database, distributed calls will not be enabled for this server."); } else { _distributedCacheBinder.BindEvents(); // Sync on startup, this will run through the messenger's initialization sequence _messenger?.Sync(); } } /// /// Clear the batch on end request /// public void Handle(UmbracoRequestEnd notification) => _messenger?.SendMessages(); } }