dubbo默认不配置protocol的话会使用20880端口,所以我没有配置这句
<dubbo:protocol name="dubbo" port="20880">
然后我使用的是dubbo的注解@Reference和@Service来获取服务端的接口,但是当dubbo的提供者和消费者在不配置protocol默认使用20880端口时,启动之后会报一个错误
Caused by: org.jboss.netty.channel.ChannelException: Failed to bind to: /0.0.0.0:20880
Caused by: java.net.BindException: Address already in use: bind
然后我如果在provider指定暴露端口
<dubbo:protocol name="dubbo" port="20990" />
consumer不指定端口,也就是默认使用20880,启动之后就不会报错了,而且也能获取到提供者的接口,想请问下是什么原因。
补充下,我在网上查了下看到有人说要配置qos-server端口,但是我配置完之后也没有用
<!-- 提供方应用信息,用于计算依赖关系,请勿与提供方相同 -->
<dubbo:application name="service-consumer">
<dubbo:parameter key="qos.enable" value="true"/>
<dubbo:parameter key="qos.accept.foreign.ip" value="false"/>
<!--
报错java.net.BindException: 地址已在使用
问题出现的原因:
consumer启动时qos-server也是使用的默认的22222端口,但是这时候端口已经被provider给占用了,所以才会报错的。
解决:指定新端口号
-->
<dubbo:parameter key="qos.port" value="33333"/>
</dubbo:application>
这是我的配置文件
provider的配置文件:
<dubbo:application name="dubbo_provider"/>
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
<dubbo:annotation package="com.dubbo"/>
provider的接口:
@Service
public class IProvideServiceImpl implements IProviderService {
public String getString(){
return "hello world";
}
}
consumer的配置文件(添加了spring-mvc):
spring配置文件
<dubbo:application name="dubbo_consumer">
<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>
<dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry>
spring-mvc配置文件
<dubbo:annotation package="com.dubbo" />
<context:component-scan base-package="com.dubbo"/>
<mvc:annotation-driven/>
<mvc:default-servlet-handler/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/"/>
<property name="suffix" value=".jsp"/>
</bean>
控制层调用提供者接口
@Controller
@RequestMapping("/dubbo")
public class ComsumerController {
@Reference
private IProviderService iProviderService;
@ResponseBody
@RequestMapping("/hello")
public String hello(){
System.out.println("welcome");
String str = iProviderService.getString();
System.out.println(str);
return "dubbo";
}
}