public synchronized void register(MeshRuleListener listener) {
        if (listener == null) {
            return;
        }
        ConcurrentHashMapUtils.computeIfAbsent(listenerMap, listener.ruleSuffix(), (k) -> new ConcurrentHashSet<>())
                .add(listener);
    }
@Test
    void register() {
        MeshRuleDispatcher meshRuleDispatcher = new MeshRuleDispatcher("TestApp");

        MeshRuleListener listener1 = new MeshRuleListener() {
            @Override
            public void onRuleChange(String appName, List<Map<String, Object>> rules) {}

            @Override
            public void clearRule(String appName) {}

            @Override
            public String ruleSuffix() {
                return "Type1";
            }
        };

        meshRuleDispatcher.register(listener1);
        meshRuleDispatcher.register(listener1);

        Assertions.assertEquals(
                1, meshRuleDispatcher.getListenerMap().get("Type1").size());
        Assertions.assertTrue(meshRuleDispatcher.getListenerMap().get("Type1").contains(listener1));
    }