这里有一个DubboLogo的报错,后面我们会讲到。显然,starter里面用到的dubbo2.6.0的代码在dubbo2.8.4里面做了改动,已经调不了了,怎么办,只能抛弃starter,使用传统的dubbo调用方法了。
//不使用starter <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.8.4</version> </dependency>在resources/spring目录下添加一个dubbo-consumer.xml文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://code.alibabatech.com/schema/dubbo "> <dubbo:application name="mydubbodemo"/> <!-- 注册中心配置,使用zookeeper注册中心暴露服务地址 --> <dubbo:registry id="registry1" address="zookeeper://127.0.0.1:2181" timeout="60000" /> <dubbo:consumer timeout="120000" retries="0" check="false"/> <dubbo:reference interface="com.skyblue.dubbodemo.service.IHelloService" registry="registry1" id="helloService"/> </beans>然后在消费端的启动文件里面加上这个xml文件
@SpringBootApplication @ImportResource("classpath:spring/dubbo-consumer.xml") class DubbodemoClientApplication{ public static void main(String[] args) { SpringApplication.run(DubbodemoClientApplication.class, args); } }调用服务的类改成传统的引入方式
@Autowired private IHelloService helloService;这样就能使用2.8.4版本的dubbo了。
但是,这种方法需要在xml里面显式的申明我需要调用的服务,和直接用注解@Reference就调用服务比方便性差太多了,虽然现在可以使用了,但我还是深深的想念starter...
3、看山还是山,就要用starter看过我之前文章的朋友应该清楚,其实starter是一个很简单的规范,可以让开发人员来自定义自己的starter,既然官方不支持,那我们就自己改一个starter不就行了,我就是拿2.0.0版本的官方dubbo starter改的。先clone一份官方的版本,这里。
首先要改的就是把pom.xml的dubbo版本升级到2.8.4,但改完后就会看到有报错。报错就是这个类DubboBannerApplicationListener
bannerTextBuilder.append(DubboSpringBootStarterConstants.LINE_SEPARATOR).append(DubboLogo.dubbo) .append(" :: Dubbo :: (v").append(Version.getVersion()).append(")") .append(DubboSpringBootStarterConstants.LINE_SEPARATOR);里面的DubboLogo这个类在dubbo后面版本里面被去掉了,所以报错,但这个其实是在后台的console 出现一个dubbo的标志,不要也无所谓,去掉就好了。上面我们在消费端强行升级dubbo版本,启动时报的其实也是这个错。