@Override
    public Map<String, List<String>> getRequestTag(Object invoker, Object invocation, Map<String, Object> attachments,
            Set<String> matchKeys, Set<String> injectTags) {
        if (CollectionUtils.isEmpty(injectTags)) {
            // 染色标记为空，代表没有染色规则，直接return
            LOGGER.fine("Lane tags are empty.");
            return Collections.emptyMap();
        }

        // markers for upstream transparent transmissions
        Map<String, List<String>> requestTag = getRequestTag(attachments, injectTags);

        // this staining marker
        String interfaceName = DubboReflectUtils.getServiceKey(DubboReflectUtils.getUrl(invoker));
        String methodName = DubboReflectUtils.getMethodName(invocation);
        Object[] args = DubboReflectUtils.getArguments(invocation);
        Map<String, List<String>> laneTag = laneContextFilterService
                .getLane(interfaceName, methodName, attachments, args);
        if (CollectionUtils.isEmpty(laneTag)) {
            LOGGER.fine("Lane is empty.");
            return requestTag;
        }

        // If there is a marker in the upstream transmission that is the same as the one in this staining,
        // the upstream transmission shall prevail
        laneTag.forEach(requestTag::putIfAbsent);
        if (LOGGER.isLoggable(Level.FINE)) {
            LOGGER.fine("Lane is " + requestTag);
        }
        return requestTag;
    }
@Test
    public void testGetRequestTag() {
        // Test getMatchTags returns null
        configService.setReturnEmptyWhenGetInjectTags(true);
        Map<String, List<String>> requestTag = laneContextFilterHandler.getRequestTag(invoker, invocation,
                invocation.getObjectAttachments(), configService.getMatchKeys(), configService.getInjectTags());
        Assert.assertEquals(requestTag, Collections.emptyMap());

        // the test getLane returns null
        configService.setReturnEmptyWhenGetInjectTags(false);
        LANE_CONTEXT_FILTER_SERVICE.setReturnEmpty(true);
        requestTag = laneContextFilterHandler.getRequestTag(invoker, invocation, invocation.getObjectAttachments(),
                configService.getMatchKeys(), configService.getInjectTags());
        Assert.assertEquals(2, requestTag.size());
        Assert.assertEquals("bar1", requestTag.get("bar").get(0));
        Assert.assertEquals("foo1", requestTag.get("foo").get(0));

        // test that the getLane is not empty
        configService.setReturnEmptyWhenGetInjectTags(false);
        LANE_CONTEXT_FILTER_SERVICE.setReturnEmpty(false);
        requestTag = laneContextFilterHandler.getRequestTag(invoker, invocation, invocation.getObjectAttachments(),
                configService.getMatchKeys(), configService.getInjectTags());
        Assert.assertEquals(3, requestTag.size());
        Assert.assertEquals("bar1", requestTag.get("bar").get(0));
        Assert.assertEquals("foo1", requestTag.get("foo").get(0));
        Assert.assertEquals("flag1", requestTag.get("sermant-flag").get(0));
    }