Apache Ignite RemoteListen .Net

#.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 ?