Dubbo入门JAVA例子

    xiaoxiao2025-07-29  17

     

         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自定义导航整理发布

    原文链接:https://www.onekbit.com/ViewBlog/blog/BID20190416100116

    最新回复(0)