Infinispan Jgroups Оставить сообщение

Я хочу спросить, есть ли у infinispan возможность для каждого узла кластера отправлять сообщение о выходе.

В моем случае каждый узел в кластере представлен веб-приложением (одной войной). Итак, внутри моего сервера приложений столько узлов кластера, сколько развернуто веб-приложение.

Проблема возникает, когда веб-приложение не развернуто. Список представлений кластера не понимает, что узел покинул кластер, и когда я повторно развертываю приложение, кластер добавляет новый узел, не удаляя предыдущий. В результате представление кластера увеличивается каждый раз, когда я развертываю приложение.

Есть ли способ отправлять «сообщение о выходе» каждый раз, когда приложение не развернуто?

Я использовал этот фрагмент кода, чтобы заставить jgroups отправить новую конфигурацию, но в этом случае ситуация становится действительно нестабильной.

        Transport   tp;
        tp=cacheManager.getCache(SessionConstants.CACHE_MANAGER_GLOBAL_JNDI_NAME).getAdvancedCache().getRpcManager().getTransport();
        Channel ch=((JGroupsTransport)tp).getChannel();

        View view=ch.getView();
        org.jgroups.Address localAddr=ch.getAddress();
        org.jgroups.Address coord=view.getMembersRaw()[0];

        int index = view.getMembers().indexOf(localAddr);


        if(cacheManager.getTransport().getMembers().size() == 1) {
              logger.error("Coordinator cannot change as view only has a single member");
            return;
        }

        List<org.jgroups.Address> mbrs=new ArrayList<>(view.getMembers());
        long new_id=view.getViewId().getId() + 1;

        org.jgroups.Address tmp_coord=mbrs.remove(index);
        //mbrs.add(tmp_coord);
        View new_view=new View(mbrs.get(0), new_id, mbrs);
        GMS gms=(GMS)ch.getProtocolStack().findProtocol(GMS.class);
        gms.castViewChange(new_view, null, mbrs);

Используя этот код, кластер уведомляется, когда узел покидает кластер, но я теряю некоторые данные.

Поэтому я надеюсь, что Infinispan предоставит API для решения этой ситуации.


person Alex    schedule 09.08.2016    source источник
comment
Что-то не так с вызовом {{cacheManager.stop()}}? Это закрывает канал JGroups и изящно покидает кластер как на стороне Infinispan, так и на стороне JGroups.   -  person Radim Vansa    schedule 10.08.2016
comment
@Flavius, может быть не очень хорошей идеей, если диспетчер кеша привязан к JNDI. См. ответ Пола здесь.   -  person Galder Zamarreño    schedule 22.08.2016