如不了解Dubbo,请移步了解:什么是Dubbo
Dubbo快速上手(Java Demo)
①我们需要搞一个服务提供方(dubbo-server)和服务消费方(dubbo-client)。项目结构图如下:
②maven分模块开发,在服务提供方server中A模块提供一个sayHello接口,然后在B模块提供一个sayHello的实现类
/**
* 接口类
*/
public interface ISayHello {
public String sayHello(String name);
}
/**
* 实现类
*/
public class SayHelloImpl implements ISayHello {
public String sayHello(String name) {
return "Hello," + name;
}
}
③服务提供方,使用dubbo服务治理,pom.xml引入dubbo依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.5</version>
</dependency>
<!-- 解决如下问题:Caused by: java.lang.ClassNotFoundException: io.netty.channel.EventLoopGroup -->
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.32.Final</version>
</dependency>
<!-- 解决如下问题:Caused by: java.lang.ClassNotFoundException: org.apache.curator.RetryPolicy -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.13.0</version>
</dependency>
<!-- 解决如下问题:Caused by: java.lang.ClassNotFoundException: org.apache.curator.framework.recipes.cache.TreeCacheListener -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.13.0</version>
</dependency>
使用zookeeper中间件治理,添加zookeeper的maven依赖
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
</dependency>
④服务提供方,resources文件夹下,配置一个xxx.xml(名称随意,此处定义dubbo-server.xml)文件,用 Spring 配置声明暴露服务
<?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://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 服务提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="dubbo-server" owner="lzb" />
<!-- 注册中心(dubbo支持zookeeper/redis/multicast/simple,用的比较多的是zookeeper) -->
<dubbo:registry address="zookeeper://192.168.204.201:2181"/>
<!--dubbo协议:用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880"/>
<!--声明需要暴露的服务接口 -->
<dubbo:service interface="com.test.dubbo.ISayHello" ref="sayHelloService"/>
<!-- spring声明式bean -->
<bean id="sayHelloService" class="com.test.dubbo.SayHelloImpl"/>
</beans>
⑤服务提供方,加载Spring配置。
/**
* 随便定义一个类,加载Spring配置
*/
public class ProviderMain {
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"dubbo-server.xml"});
context.start();
System.in.read();
}
}
⑥服务消费者,使用dubbo服务治理,pom.xml引入dubbo依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.5</version>
</dependency>
<!-- 解决如下问题:Caused by: java.lang.ClassNotFoundException: io.netty.channel.EventLoopGroup -->
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.32.Final</version>
</dependency>
<!-- 解决如下问题:Caused by: java.lang.ClassNotFoundException: org.apache.curator.RetryPolicy -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.13.0</version>
</dependency>
<!-- 解决如下问题:Caused by: java.lang.ClassNotFoundException: org.apache.curator.framework.recipes.cache.TreeCacheListener -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.13.0</version>
</dependency>
使用zookeeper中间件治理,添加zookeeper的maven依赖
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
</dependency>
⑦服务消费者,resources文件夹下,配置一个xxx.xml(名称随意),此处定义dubbo-client.xml)文件,用 Spring 配置声明暴露服务
<?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://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:application name="dubbo-client" owner="lzb"/>
<!-- 注册中心(以下写法二选一,写法不同,实质相同) -->
<dubbo:registry address="192.168.204.201:2181" protocol="zookeeper"/>
<!-- <dubbo:registry address="zookeeper://192.168.204.201:2181"/> -->
<!-- 生成远程服务代理,可以和本地bean一样使用sayHelloService-->
<dubbo:reference id="sayHelloService" interface="com.test.dubbo.ISayHello"/>
</beans>
⑧服务消费者,加载Spring配置,并调用远程服务
/**
* 随便定义一个类,加载Spring配置
*/
public class test {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"dubbo-client.xml"});
context.start();
ISayHello entity = (ISayHello)context.getBean("sayHelloService"); // 获取远程服务代理
String content = entity.sayHello("Dubbo"); // 执行远程方法
System.out.println(content); // 显示调用结果
}
}
⑨至此,Dubbo实例完成,注册中心使用ZooKeeper,测试输出调用结果:"Hello,Dubbo"
dubbo-demo已上传:dubbo_demo.zip。实例仅供上传备份,如需demo,请发表评论留下email,让我看到你哦