#.net #ignite
#.net #ignite
Вопрос:
Я запустил сервер через BAT-файл, а затем запустил клиент для записи данных с помощью кода и установил время истечения срока действия. Затем я хочу отслеживать записи с истекшим сроком действия на стороне клиента, подписавшись на EVT_CACHE_OBJECT_EXPIRED
, но я смотрю на https://issues.apache.org/jira/browse/IGNITE-1682 — RemoteListen
удален из Ignite.СЕТЬ, каков альтернативный план? Или есть какие-либо примеры, на которые можно посмотреть.
Комментарии:
1. Пожалуйста, уточните — что вы намерены делать?
Then I want to by subscribing to the remote Server is event date
— что это значит?2. Я хочу знать, когда истекает срок действия кэшированных данных, подписавшись на события удаленного сервера, и добавить свою собственную логику, когда истекает срок действия данных.
3. Я хочу знать, когда истекает срок действия кэшированных данных, подписавшись на события на стороне сервера (EVT_CACHE_OBJECT_EXPIRED), но прямо сейчас. NET API имеет LocalListen, а не RemoteListen.
Ответ №1:
Вы можете использовать LocalListen
на серверном узле, а затем использовать Ignite Messaging для уведомления клиентов о событии.
Сервер
server.GetEvents().LocalListen(new EventListener(server.GetMessaging()), EventType.CacheObjectExpired);
...
public class EventListener : IEventListener<CacheEvent>
{
private readonly IMessaging _messaging;
public EventListener(IMessaging messaging)
{
_messaging = messaging;
}
public bool Invoke(CacheEvent evt)
{
_messaging.Send(evt.Key, "Expired");
return true;
}
}
Клиент
client.GetMessaging().LocalListen(new MessageListener(), "Expired");
...
public class MessageListener : IMessageListener<object>
{
public bool Invoke(Guid nodeId, object message)
{
Console.WriteLine("Expired: " message);
return true;
}
}
Комментарии:
1. Здравствуйте, я попробовал код, который вы отправили, но когда срок действия кэша истек, уведомления о сообщении по-прежнему не было. Теперь я не знаю, в чем проблема.
2.
codeCacheConfiguration configuration = new CacheConfiguration(CacheName, query); var cache = ignite.GetOrCreateCache<string, Person>(configuration).WithExpiryPolicy(expiryPolicy); var remotes = ignite.GetCluster().ForRemotes(); remotes.GetEvents().LocalListen(new EventListener(remotes.GetMessaging()), EventType.CacheObjectExpired); var local = ignite.GetCluster().ForLocal().GetMessaging(); local.LocalListen(new MessageListener(), "Expired");
3. @coder-yp вот рабочая суть: gist.github.com/ptupitsyn/42e6e6c3b20147d04f0f1bda9e1e1464 Он запускает клиент и сервер в одном процессе для простоты, вы можете разделить их по своему усмотрению.
4. Извините, ссылка не открывается
5. Ссылка общедоступна, и она работает. Можете ли вы достичь github.com ?