Dubbo入门JAVA例子
豆豆 2020-03-09 22:50:33 599人已围观
Dubbo是阿里巴巴SOA服务化治理方案的核心框架,是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架。告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册。
第一步、服务消费方demo
我这里在同一台电脑上以2个普通java项目为例来测试,接口在消费方定义打包丢入到提供方工程中,消费方工程结构如下:
定义接口的代码:
package com.test.dubbo.service;
/*
* 测试服务接口,会打成jar包丢到提供方工程中,让提供方具体实现
*/
public interface ITestService {
public String hello(String name);
}
消费方的调用服务测试代码:
package com.test.dubbo.test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.test.dubbo.service.ITestService;
/*
* 消费方调用服务的测试代码
*/
public class ConsumerTest {
public static void main(String[] args) {
ClassPathXmlApplicationContext context =new ClassPathXmlApplicationContext("/dubbo-Consumer.xml");
context.start();
ITestService demoService = (ITestService) context.getBean("demoService"); //
String hello = demoService.hello("特朗普是我小弟"); //
System.out.println("消费方开始调用提供方:****************************************"+hello); //
}
}
消费方的dubbo配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/beans/spring-util-3.0.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 第一步:Dubbo起名称 计算用此名称来区分 -->
<dubbo:application name="dubbo-consumer" >
<dubbo:parameter key="qos.enable" value="false" />
</dubbo:application>
<!-- 第二步:中介 注册中心:multicast zookeeper redis ... --><dubbo:registry address="multicast://224.5.6.7:1234?unicast=false" />
<!-- 链接超时时间 -->
<dubbo:consumer timeout="5000" />
<!-- 第三步:调用服务提供方 提供的接口 -->
<dubbo:reference id="demoService" interface="com.test.dubbo.service.ITestService" check="false" url="dubbo://127.0.0.1:20880"/>
</beans>
消费方的主要代码就这么多。
第二步、服务提供方demo
服务提供方代码结构如下图:
服务实现类代码:
package com.test.dubbo.service.impl;
import com.test.dubbo.service.ITestService;//消费者的接口
/*
* 服务实现接口
*/
public class TestService implements ITestService {
@Override
public String hello(String name) {
System.out.println(name);
return "hello-------------- : " + name;
}
}
测试代码:
package com.test.dubbo.test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* https://www.onekbit.com
* @author admin
*
*/
public class ProviderTest {
public static void main(String[] args){
try {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/dubbo-Provider.xml");
context.start();
System.out.println("按任意键退出");
System.in.read();
} catch (Exception e) {
e.printStackTrace();
}
}
}
dubbo配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/beans/spring-util-3.0.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 第一步:Dubbo起名称 计算用此名称来区分 -->
<dubbo:application name="dubbo-provider" >
<dubbo:parameter key="qos.enable" value="false" />
<!-- <dubbo:parameter key="qos.accept.foreign.ip" value="false" />
<dubbo:parameter key="qos.port" value="12345" /> -->
</dubbo:application>
<!-- 第二步:中介 注册中心: Dubbo目前支持4种注册中心,(multicast,zookeeper,redis,simple) 推荐使用Zookeeper注册中心
参考文章:https://www.cnblogs.com/duanxz/p/3772765.html
-->
<!-- 注册地址 -->
<dubbo:registry address="multicast://224.5.6.7:1234?unicast=false" />
<!-- 用dubbo协议在20880端口暴露服务 -->
<!-- <dubbo:protocol name="dubbo" port="20880" /> -->
<dubbo:protocol host="127.0.0.1" name="dubbo" port="20880"></dubbo:protocol>
<!-- 第四步:设置服务提供方 提供的接口 -->
<dubbo:service interface="com.test.dubbo.service.ITestService" ref="demoService" executes="10" />
<!-- 和本地bean一样实现服务 -->
<bean id="demoService" class="com.test.dubbo.service.impl.TestService" />
</beans>
第三步、启动运行
要先启动提供方测试代码,待服务提供方启动完成后,再启动消费方测试代码,服务提供方控制台输出如下:
服务提供方先后2次输出
消费方输出
第四步、过程异常处理
1、dubbo的xml文件错误提示cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element处理;
下载一个dubbo.xsd文件windows->preferrence->xml->xmlcatalog add->catalog entry ->file system 选择刚刚下载的文件路径修改key值和配置文件的http://code.alibabatech.com/schema/dubbo/dubbo.xsd 如下图:
保存。。在xml文件右键validate ok解决了。
2、警告: [DUBBO] Fail to start qos server: , dubbo version: 2.7.1, current host: 10.99.20.124 java.net.BindException: Address already in use: bind
可以先关闭qos server,在服务提供方xml文件中加入以下配置
<dubbo:application name="dubbo-provider" >
<dubbo:parameter key="qos.enable" value="false" />
</dubbo:application>
在消费者方xml文件中加入以下配置:
<dubbo:application name="dubbo-consumer" >
<dubbo:parameter key="qos.enable" value="false" />
</dubbo:application>
3、其他错误处理陆续更新中。。。。
onekbit自定义导航整理发布