这里只阐述如何集成生产者端,消费者端差不多雷同就不多叙述了:
1.首先映入相关依赖
<dependency>
<groupId>io.dubbo.springboot</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
<version>1.0.0</version>
</dependency>
2.然后配置文件
spring.dubbo.application.name=自己的项目名称
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
spring.dubbo.scan=扫描dubbo实现的类的路径
3.编写测试类
public interface DubboTest{
void test();
}
public class MyDubboTestImpl implements DubboTest{
@Override
public void test(){
System.out.println("dubbo服务");
}
}
4.启动本地zk,然后再启动服务
5.观察zk信息可以看到服务被注册上
注意:
这里在使用配置文件的时候有一个坑需要注意,目前应该是只有在用这个jar包集成dubbo的时候才会出现,
我们在使用内部配置文件的时候没有任何问题;但是当使用外部配置文件,例如
@PropertySource(value={"xxxx"})来引入时,会发现dubbo服务无法注册到zk上;
我经过调试源码发现,当我们通过引入外部配置文件的方式启动程序时,发现
package io.dubbo.springboot;
import com.alibaba.dubbo.config.spring.AnnotationBean;
import org.springframework.beans.BeanUtils;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.Environment;
public class DubboConfigurationApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
Environment env = applicationContext.getEnvironment();
String scan = env.getProperty("spring.dubbo.scan");
if (scan != null) {
AnnotationBean scanner = BeanUtils.instantiate(AnnotationBean.class);
scanner.setPackage(scan);
scanner.setApplicationContext(applicationContext);
applicationContext.addBeanFactoryPostProcessor(scanner);
applicationContext.getBeanFactory().addBeanPostProcessor(scanner);
applicationContext.getBeanFactory().registerSingleton("annotationBean", scanner);
}
}
}
上面这个类中的scan 参数为null,但是使用内部配置文件的时候scan这个参数不为空;
然后再查看env以及applicationContext的参数信息,发现没相关配置的信息,看下图:
1.不正常:
![](https://img.haomeiwen.com/i12100978/0aa03ee7249d5841.png)
2.正常的:
![](https://img.haomeiwen.com/i12100978/7d3074d72b45dbb6.png)
![](https://img.haomeiwen.com/i12100978/02cbe60e9e5e8e4f.png)
解决办法:
1.首先想到的解决办法是直接继承这个类,然后重写该方法,然后尝试了发现不生效,通过追查引用发现,这个类是通过spring.factories这个文件配置的
![](https://img.haomeiwen.com/i12100978/2f98a7e60348a70d.png)
2.下载这个jar的源码重新编写这个类,然后打包传入本地私服的第三方jar上,通过pom导入使用;
3.寻找能否覆盖这个文件,指定使用自己重写的配置类(不知道有没有,还没有找到);
网友评论