
### Environment

* Dubbo version: 3.0.2.1
* Operating System version: Linux 4.14.152-127.182.amzn2.x86_64
* Java version: 1.8_310

### Steps to reproduce this issue

1. A provider annotated with @DubboService(tag = 'XXX')
2. A Consumer annotated with @DubboReference(tag = 'XXX')
3. Consumer will complain no provider found

Possible Cause:
1. TagDynamicStateRouter#line 112 will hardcode tag as 'noTag' even the service has a valid tag but without tagRouterRule set
```
invocation.setAttachment(TAG_KEY, NO_TAG);
```
2. TagStaticStateRouter#64 try to locate the tag with below code, however the tag attachment already set as noTag from previous router, hence the tag is always noTag even the url has a valid tag set.
```
 String tag = StringUtils.isEmpty(invocation.getAttachment(TAG_KEY)) ? url.getParameter(TAG_KEY) :
            invocation.getAttachment(TAG_KEY);
        if (StringUtils.isEmpty(tag)) {
            tag = NO_TAG;
        }
```

Possible Fix:
replace StringUtils.isEmpty as below function:
```
boolean isNoTag(String value) {
      return StringUtils.isEmpty(value) || NO_TAG.equals(value));
}
```
import org.apache.dubbo.rpc.cluster.RouterChain;
import org.apache.dubbo.rpc.cluster.router.state.AbstractStateRouter;
import org.apache.dubbo.rpc.cluster.router.state.BitList;
import org.apache.dubbo.rpc.cluster.router.state.RouterCache;
import static org.apache.dubbo.common.constants.CommonConstants.TAG_KEY;
/**
 * TagStaticStateRouter, "application.tag-router"
 */
public class TagStaticStateRouter extends AbstractStateRouter {
    public static final String NAME = "TAG_ROUTER";
    private static final int TAG_ROUTER_DEFAULT_PRIORITY = 100;
    private static final String NO_TAG = "noTag";
    public TagStaticStateRouter(URL url, RouterChain chain) {
        super(url, chain);
        this.priority = TAG_ROUTER_DEFAULT_PRIORITY;
    }
    @Override
    public URL getUrl() {
        return url;
    }
    @Override
    public <T> BitList<Invoker<T>> route(BitList<Invoker<T>> invokers, RouterCache<T> routerCache, URL url, Invocation invocation)
        throws RpcException {
        String tag = StringUtils.isEmpty(invocation.getAttachment(TAG_KEY)) ? url.getParameter(TAG_KEY) :
            invocation.getAttachment(TAG_KEY);
        if (StringUtils.isEmpty(tag)) {
            tag = NO_TAG;
        }
        ConcurrentMap<String, BitList<Invoker<T>>> pool = routerCache.getAddrPool();
        BitList<Invoker<T>> res = pool.get(tag);