dubbo集成到spring boot中,充当消费者
使用的是注解的配置方式。
1、pom.xml中添加
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.4</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
2、添加dubbo基础配置DubboBaseConfig.java
import org.springframework.context.annotation.Bean;
import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.RegistryConfig;
public class DubboBaseConfig {
@Bean
public RegistryConfig registry() {
RegistryConfig registryConfig = new RegistryConfig();
registryConfig.setAddress("127.0.0.1:2181");
registryConfig.setProtocol("zookeeper");
return registryConfig;
}
@Bean
public ApplicationConfig application() {
ApplicationConfig applicationConfig = new ApplicationConfig();
applicationConfig.setName("o2o-platform");
return applicationConfig;
}
}
3、添加bean引用DubboReferenceConfig.java继承DubboBaseConfig
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.alibaba.dubbo.config.spring.ReferenceBean;
import com.aomygod.pay.PayService;
@Configuration
public class DubboReferenceConfig extends DubboBaseConfig {
@Bean
public ReferenceBean<PayService> payService() {
ReferenceBean<PayService> ref = new ReferenceBean<>();
ref.setGroup("o2o");
ref.setVersion("1.0");
ref.setInterface(PayService.class);
ref.setCheck(false);
return ref;
}
}
4、Spring注解方式直接使用bean
@Autowired
private PayService payService;
然后就报错了:interface is not visible from class loader
一天的时间全坑在里面,这种查,断点进去看:
if (tmp != ics[i])
throw new IllegalArgumentException(ics[i] + " is not visible from class loader");
发现tmp 和 ics[i] 值相同但对象不一样,难道dubbo和spring类加载器不一致或冲突的问题。。。
各种找解决方案,还是没解决了,最后看maven库dubbo最新版本是 2.5.7
就试了一下升级版本
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.7</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
</exclusions>
</dependency>
没想到,真的就可以了,好坑爹