大前提
1、阿Sir,Zookeeper要开啊(Server、Client)
2、运行之前先在父工程的生命周期中,先clean下再install下(都在Maven中)
一、问题1:java.net.BindException: Address already in use: bind
1、前提
用的IDEA;
dubbo有Consumer和Provider,它们有各自的Tomcat,我们应该在各自项目的pom.xml中修改它们的Tomcat端口,使它们不同,但:
2、问题出现
可能你会困惑,明明修改了两Tomcat的端口都不一致了,为啥还出现Address already in use
3、原因
控制台报错:
[DUBBO] qos-server can not bind localhost:22222, dubbo version: 2.7.10
dubbo还有个QOS Server端口,默认为22222,俩Tomcat的QOS都用了这个端口,不冲突才怪嘞
4、解决方法
因此需要修改Consumer、Provider这两者之中至少一个项目的QOS Server端口,比如我修改Consumer的,在其有关于dubbo的配置文件(spring-dubbo)中添加如下内容:
<!-- dubbo_comsumer在dubbo的应用名称,更改qos服务端口为33333 -->
<dubbo:application name="dubboConsumer">
<dubbo:parameter key="qos.enable" value="true" />
<dubbo:parameter key="qos.accept.foreign.ip" value="false" />
<dubbo:parameter key="qos.port" value="33333" />
</dubbo:application>
二、问题2:找不到映射
1、前提
(1) 在Provider的Service中的配置文件
spring-dubbo.xml
<!-- 1、配置dubbo_provider的dubbo应用名称 -->
<dubbo:application name="dubboProvider"/>
<!-- 2、由于Provider需注册到Zookeeper中才能用,因此需配置dubbo注册中心Zookeeper地址 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
<!-- 3、要将对应工程中指定的信息注册到zookeeper中,因此要配置需要暴露出来的业务接口和实例 -->
<dubbo:service interface="service.UserService" ref="userServiceImpl"/>
<!-- 4、UserServiceItf实现类对象 -->
<bean id="userServiceImpl" class="service.UserServiceImpl"/>
(2) 在Consumer中的Controller中的配置文件
spring-dubbo.xml
<!-- 1、dubbo_comsumer在dubbo的应用名称,更改qos服务端口 -->
<dubbo:application name="dubboConsumer">
<dubbo:parameter key="qos.enable" value="true" />
<dubbo:parameter key="qos.accept.foreign.ip" value="false" />
<dubbo:parameter key="qos.port" value="33333" />
</dubbo:application>
<!-- 2、配置dubbo注册中心Zookeeper地址 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
<!-- 3、订阅远程服务对象 -->
<dubbo:reference id="userService" interface="service.UserService"/>
<!-- 4、Consumer引用Provider提供至注册中心的接口的实现类对象 -->
<bean id="userController" class="controller.UserController">
<property name="userServiceImpl" ref="userService"/>
</bean>
2、问题出现
跑了Provider的Tomcat后,跑Consumer的Tomcat,控制台报错:
//第1个错误:
Error creating bean with name 'userController' defined in file
[E:\IDEACode\dubbo_parent\dubbo_consumer\target\classes\spring\spring-dubbo.xml]:
Cannot resolve reference to bean 'userService' while setting bean property 'userServiceImpl';
//第2个错误:
Error creating bean with name 'userService': FactoryBean threw exception on object creation;
//第3个错误:
Caused by: java.lang.NoClassDefFoundError: org/apache/curator/x/discovery/ServiceDiscovery
3、原因
emmmmm… 鹅唔鸡啊…
🐟果内鸡斗嘅话,评论区雷港畀鹅听吼唔吼啊嘻嘻,唔该晒
但我知道主要针对第3个错误锤就完事了,面向stackoverflow编程得到以下解决方案
4、解决方法
在父工程和Comsumer的工程里的pom.xml添加上有关于Zookeeper客户端的依赖:
(这里的依赖版本被我导出到dependencies外面了)
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-x-discovery</artifactId>
<version>${curator.version}</version>
</dependency>