我想询问是否有infinispan,每个群集节点都有可能发送一个离开消息 .

在我的用例中,集群中的每个节点都由Web应用程序(单个战争)表示 . 因此,在我的应用程序服务器中,部署的Web应用程序数量与集群节点数一样多 .

取消部署Web应用程序时会出现此问题 . 群集视图列表没有意识到节点离开了群集,当我再次重新部署应用程序时,群集会添加新节点而不删除前一个节点 . 结果是每次部署应用程序时群集视图都会增长 .

是否有方法在每次取消部署应用程序时发送“离开消息”?

我使用这段代码强制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来处理这种情况 .