@Override
    String getInterfaceName(Invoker invoker, String prefix) {
        return DubboUtils.getInterfaceName(invoker, prefix);
    }
@Test
    public void testInterfaceLevelFollowControlAsync() throws InterruptedException {

        Invoker invoker = DubboTestUtil.getDefaultMockInvoker();
        Invocation invocation = DubboTestUtil.getDefaultMockInvocationOne();

        when(invocation.getAttachment(ASYNC_KEY)).thenReturn(Boolean.TRUE.toString());
        initFlowRule(DubboUtils.getInterfaceName(invoker));

        Result result1 = invokeDubboRpc(false, invoker, invocation);
        assertEquals("normal", result1.getValue());

        // should fallback because the qps > 1
        Result result2 = invokeDubboRpc(false, invoker, invocation);
        assertEquals("fallback", result2.getValue());

        // sleeping 1000 ms to reset qps
        Thread.sleep(1000);
        Result result3 = invokeDubboRpc(false, invoker, invocation);
        assertEquals("normal", result3.getValue());

        verifyInvocationStructureForCallFinish(invoker, invocation);
    }