### Environment

* Dubbo version: 2.6.x
* Operating System version:  mac
* Java version: 1.8

### Steps to reproduce this issue

1. when use multicast as registry (It work well when using zookeeper)
2. use @Reference to get the consumer

You can write a demo base on dubbo demo module, just modify 3 files.  

1.Add new configuration file (dubbo-demo2-consumer.xml):
```
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo";
       xmlns:context="http://www.springframework.org/schema/context";
       xmlns="http://www.springframework.org/schema/beans";
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
       http://dubbo.apache.org/schema/dubbo 
http://dubbo.apache.org/schema/dubbo/dubbo.xsd
       http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context.xsd";>

    <!-- consumer's application name, used for tracing dependency relationship 
(not a matching criterion),
    don't set it same as provider -->
    <dubbo:application name="demo-consumer"/>

    <!-- use multicast registry center to discover service -->
    <dubbo:registry address="zookeeper://127.0.0.1:2181"/>

    <!-- generate proxy for the remote service, then demoService can be used in 
the same way as the
    local regular interface -->
    <dubbo:annotation/>
    <context:component-scan base-package="com.alibaba.dubbo.demo.consumer">
        <context:include-filter type="annotation" 
expression="com.alibaba.dubbo.config.annotation.Reference"/>
    </context:component-scan>

</beans>

```
2.new service to consumer package:
```
@Service
public class ConsumerService {

    @Reference(parameters = {"k1", "v1"})
    private DemoService demoService;

    public void testReference() {
        System.out.println(demoService.sayHello("www.world"));
    }
}
```
3.new main File :  

```
public class Consumer2 {

    public static void main(String[] args) {
        //Prevent to get IPV6 address,this way only work in debug mode
        //But you can pass use -Djava.net.preferIPv4Stack=true,then it work 
well whether in debug mode or not
        System.setProperty("java.net.preferIPv4Stack", "true");
        ClassPathXmlApplicationContext context = new 
ClassPathXmlApplicationContext(new 
String[]{"META-INF/spring/dubbo-demo2-consumer.xml"});
        context.start();
        ConsumerService consumerService = (ConsumerService) 
context.getBean(ConsumerService.class); // get remote service proxy

        while (true) {
            try {
                Thread.sleep(1000);
                consumerService.testReference(); // call remote method

            } catch (Throwable throwable) {
                throwable.printStackTrace();
            }
        }
    }
}
```


### Actual Result

when start the consumer, the program has no response. 
so I print the jstack trace as follow: 

```

Found one Java-level deadlock:
=============================
"DubboMulticastRegistryReceiver":
  waiting to lock monitor 0x00007fde47292668 (object 0x000000076eb01868, a 
java.util.concurrent.ConcurrentHashMap),
  which is held by "main"
"main":
  waiting to lock monitor 0x00007fde4a810488 (object 0x000000076eb5e4c0, a 
com.alibaba.dubbo.registry.integration.RegistryDirectory),
  which is held by "DubboMulticastRegistryReceiver"

Java stack information for the threads listed above:
===================================================
"DubboMulticastRegistryReceiver":
        at 
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:188)
        - waiting to lock <0x000000076eb01868> (a 
java.util.concurrent.ConcurrentHashMap)
        at 
org.springframework.beans.factory.support.AbstractBeanFactory.isTypeMatch(AbstractBeanFactory.java:492)
        at 
org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:432)
        at 
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:403)
        at 
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:389)
        at 
org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveNamedBean(DefaultListableBeanFactory.java:1002)
        at 
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:345)
        at 
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:340)
        at 
org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1092)
        at 
com.alibaba.dubbo.config.spring.extension.SpringExtensionFactory.getExtension(SpringExtensionFactory.java:67)
        at 
com.alibaba.dubbo.common.extension.factory.AdaptiveExtensionFactory.getExtension(AdaptiveExtensionFactory.java:47)
        at 
com.alibaba.dubbo.common.extension.ExtensionLoader.injectExtension(ExtensionLoader.java:521)
        at 
com.alibaba.dubbo.common.extension.ExtensionLoader.createExtension(ExtensionLoader.java:497)
        at 
com.alibaba.dubbo.common.extension.ExtensionLoader.getExtension(ExtensionLoader.java:309)
        - locked <0x000000076b5ff4d8> (a com.alibaba.dubbo.common.utils.Holder)
        at 
com.alibaba.dubbo.common.extension.ExtensionLoader.getActivateExtension(ExtensionLoader.java:193)
        at 
com.alibaba.dubbo.common.extension.ExtensionLoader.getActivateExtension(ExtensionLoader.java:172)
        at 
com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper.buildInvokerChain(ProtocolFilterWrapper.java:48)
        at 
com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper.refer(ProtocolFilterWrapper.java:108)
        at com.alibaba.dubbo.rpc.Protocol$Adaptive.refer(Protocol$Adaptive.java)
        at 
com.alibaba.dubbo.registry.integration.RegistryDirectory.toInvokers(RegistryDirectory.java:387)
        at 
com.alibaba.dubbo.registry.integration.RegistryDirectory.refreshInvoker(RegistryDirectory.java:253)
        at 
com.alibaba.dubbo.registry.integration.RegistryDirectory.notify(RegistryDirectory.java:223)
        - locked <0x000000076eb5e4c0> (a 
com.alibaba.dubbo.registry.integration.RegistryDirectory)
        at 
com.alibaba.dubbo.registry.support.AbstractRegistry.notify(AbstractRegistry.java:414)
        at 
com.alibaba.dubbo.registry.support.FailbackRegistry.doNotify(FailbackRegistry.java:280)
        at 
com.alibaba.dubbo.registry.support.FailbackRegistry.notify(FailbackRegistry.java:266)
        at 
com.alibaba.dubbo.registry.multicast.MulticastRegistry.registered(MulticastRegistry.java:333)
        at 
com.alibaba.dubbo.registry.multicast.MulticastRegistry.receive(MulticastRegistry.java:209)
        at 
com.alibaba.dubbo.registry.multicast.MulticastRegistry.access$100(MulticastRegistry.java:54)
        at 
com.alibaba.dubbo.registry.multicast.MulticastRegistry$1.run(MulticastRegistry.java:104)
        at java.lang.Thread.run(Thread.java:748)
"main":
        at java.lang.Object.wait(Native Method)
        - waiting on <0x000000076eb5e4c0> (a 
com.alibaba.dubbo.registry.integration.RegistryDirectory)
        at 
com.alibaba.dubbo.registry.multicast.MulticastRegistry.doSubscribe(MulticastRegistry.java:278)
        - locked <0x000000076eb5e4c0> (a 
com.alibaba.dubbo.registry.integration.RegistryDirectory)
        at 
com.alibaba.dubbo.registry.support.FailbackRegistry.subscribe(FailbackRegistry.java:196)
        at 
com.alibaba.dubbo.registry.multicast.MulticastRegistry.subscribe(MulticastRegistry.java:394)
        at 
com.alibaba.dubbo.registry.integration.RegistryDirectory.subscribe(RegistryDirectory.java:159)
        at 
com.alibaba.dubbo.registry.integration.RegistryProtocol.doRefer(RegistryProtocol.java:306)
        at 
com.alibaba.dubbo.registry.integration.RegistryProtocol.refer(RegistryProtocol.java:287)
        at 
com.alibaba.dubbo.rpc.protocol.ProtocolListenerWrapper.refer(ProtocolListenerWrapper.java:65)
        at 
com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper.refer(ProtocolFilterWrapper.java:106)
        at com.alibaba.dubbo.rpc.Protocol$Adaptive.refer(Protocol$Adaptive.java)
        at 
com.alibaba.dubbo.config.ReferenceConfig.createProxy(ReferenceConfig.java:394)
        at 
com.alibaba.dubbo.config.ReferenceConfig.init(ReferenceConfig.java:333)
        at 
com.alibaba.dubbo.config.ReferenceConfig.get(ReferenceConfig.java:163)
        - locked <0x000000076eb00f18> (a 
com.alibaba.dubbo.config.spring.ReferenceBean)
        at 
com.alibaba.dubbo.config.spring.ReferenceBean.getObject(ReferenceBean.java:66)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at 
com.alibaba.dubbo.config.AbstractConfig.toString(AbstractConfig.java:466)
        at java.lang.String.valueOf(String.java:2994)
        at java.lang.StringBuilder.append(StringBuilder.java:131)
        at 
com.alibaba.dubbo.config.spring.beans.factory.annotation.AbstractAnnotationConfigBeanBuilder.build(AbstractAnnotationConfigBeanBuilder.java:79)
        at 
com.alibaba.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor.buildReferenceBean(ReferenceAnnotationBeanPostProcessor.java:385)
        at 
com.alibaba.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor.access$100(ReferenceAnnotationBeanPostProcessor.java:65)
        at 
com.alibaba.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor$ReferenceFieldElement.inject(ReferenceAnnotationBeanPostProcessor.java:363)
        at 
org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
        at 
com.alibaba.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor.postProcessPropertyValues(ReferenceAnnotationBeanPostProcessor.java:92)
        at 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1268)
        at 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
        at 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
        at 
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312)
        at 
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        - locked <0x000000076eb01868> (a java.util.concurrent.ConcurrentHashMap)
        at 
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308)
        at 
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
        at 
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
        at 
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867)
        at 
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543)
        - locked <0x000000076ec5b718> (a java.lang.Object)
        at 
org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
        at 
org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93)
        at com.alibaba.dubbo.demo.consumer.Consumer2.main(Consumer2.java:15)

Found 1 deadlock.

```


[ Full content available at: 
https://github.com/apache/incubator-dubbo/issues/2539 ]
This message was relayed via gitbox.apache.org for [email protected]

Reply via email to