环境搭建
在生产环境下,Dubbo 依赖的环境非常少,只依赖一个注册中心和一个管理后台。其中,Dubbo 只强制依赖注册中心,管理后台是一个非强制依赖的管理工具。
接下来,我们就以 Zookeeper 为注册中心,搭建 Dubbo 环境,包括安装注册中心和管理后台。
温馨提示
本文搭建的是有注册中心的生产环境,不是无注册中心的Demo环境。
安装注册中心
- 从 Zookeeper 官网下载一个最新最稳定版本的安装包。
zookeeper.apache.org/releases.ht…
- 将下载好的安装包解压至本地,并进入
conf
目录。
shell
复制代码
cd apache-zookeeper-3.7.1-bin/conf/
- 在
conf
目录下,创建zoo.cfg
文件,并填入以下配置信息。
properties
复制代码
tickTime=2000 initLimit=10 syncLimit=5 dataDir=//这里替换自己的目录 clientPort=2181
注意,上面的dataDir
是存储 Zookeeper 数据的目录,要替换成自己的本地目录。
- 进入bin目录。
shell
复制代码
cd ../bin/
- 执行以下命令,启动 Zookeeper 服务。
shell
复制代码
./zkServer.sh start
执行完此命令后,如果出现以下信息,就表示启动成功。
shell
复制代码
ZooKeeper JMX enabled by default Using config: /Users/majunwei/Downloads/apache-zookeeper-3.7.1-bin/bin/../conf/zoo.cfg Starting zookeeper ... STARTED
至此,注册中心就安装完成并启动了。
安装管理后台
- 从 GitHub 上下载 dubbo-admin 的发布包。
- 修改 dubbo-admin-server/src/main/resources/application.properties 文件,指定注册中心地址、服务端口以及管理员用户名密码。
properties
复制代码
admin.registry.address=zookeeper://127.0.0.1:2181 admin.config-center=zookeeper://127.0.0.1:2181 admin.metadata-report.address=zookeeper://127.0.0.1:2181 server.port=9090 admin.root.user.name=root admin.root.user.password=root
- 构建。
shell
复制代码
mvn clean package -Dmaven.test.skip=true
- 启动管理后台。
shell
复制代码
mvn --projects dubbo-admin-server spring-boot:run 或 cd dubbo-admin-distribution/target; java -jar dubbo-admin-0.1.jar
访问 http://localhost:9090 ,能正常打开,即安装成功了。
温馨提示
如果操作管理后台时出现以下异常提示信息:
在dubbo-admin-server的pom.xml
中添加以下依赖,重新打包启动即可。
xml
复制代码
<dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.2.7</version> </dependency>
基本使用方法
环境搭建完成之后,下面看 Dubbo 的基本使用方法。在使用 Dubbo 时,通常情况下需要三个项目,服务接口、服务提供者和服务消费者:
- 服务接口用于定义抽象接口;
- 服务提供者引用服务接口,并实现服务接口里的抽象接口;
- 服务消费者引用服务接口,并通过服务接口调用服务提供者中的实现。
服务接口
下面开始创建服务接口项目,并定义抽象接口。
-
新建服务接口项目,dubbo_demo_api。
-
定义抽象接口,
DemoService
。
java
复制代码
package com.yuqiao.deeplearningdubbo.demo.api; public interface DemoService { public String sayHello(String name); }
3,将dubbo_demo_api/pom.xml中的打包方式设置为jar
。
xml
复制代码
<packaging>jar</packaging>
至此,服务接口项目就创建完了,它只包括抽象接口的定义,非常简单。
服务提供者
下面创建服务提供者项目,并引用服务接口项目,实现抽象接口。
-
新建服务提供者项目,dubbo_demo_provider。
-
在 dubbo_demo_provider/pom.xml 中,添加以下配置(核心是添加了接口项目、Dubbo、Zookeeper、Spring 的依赖)。
xml
复制代码
<properties> <spring.version>4.1.9.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>com.yuqiao.deeplearningdubbo</groupId> <artifactId>dubbo_demo_api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.59.Final</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>2.7.4.1</version> </dependency> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.4</version> </dependency> <!--spring--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <!--spring web mvc--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.9</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>4.2.0</version> </dependency> </dependencies>
- 新建
DemoServiceImpl
类,并实现抽象接口DemoService
。
java
复制代码
package com.yuqiao.deeplearningdubbo.demo.provider; import com.yuqiao.deeplearningdubbo.demo.api.DemoService; public class DemoServiceImpl implements DemoService { @Override public String sayHello(String name) { return "Hello " + name; } }
- 在 dubbo_demo_provider/src/main/resources 下新建 dubbo_provider.xml,并填入以下内容(注意要填入自己的 Zookeeper 地址)。
xml
复制代码
<?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://dubbo.apache.org/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <!-- 服务提供方应用名 --> <dubbo:application name="provider-app" /> <!-- 使用zookeeper注册中心暴露服务地址 --> <dubbo:registry protocol="zookeeper" address="zookeeper://127.0.0.1:2181" /> <!-- 使用随机端口暴露服务,防止和本地其他服务冲突,可以不填,默认20880 --> <dubbo:protocol name="dubbo" port="-1" /> <!-- 配置DemoService的实现类Bean --> <bean id="demoService" class="com.yuqiao.deeplearningdubbo.demo.provider.DemoServiceImpl" /> <!-- 声明需要暴露的服务接口 --> <dubbo:service interface="com.yuqiao.deeplearningdubbo.demo.api.DemoService" ref="demoService" /> </beans>
- 新建服务提供者的启动类
Provider
。
java
复制代码
package com.yuqiao.deeplearningdubbo.demo.provider; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Provider { public static void main(String[] args) throws Exception { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"dubbo_provider.xml"}); context.start(); System.in.read(); } }
- 运行
Provider
,成功启动后就能在管理后台看到服务提供者的信息了。
至此,服务提供者项目就完成了。
服务消费者
下面创建服务消费者项目,并引用抽象接口,调用服务提供者。
-
创建服务消费者项目,dubbo_demo_consumer。
-
在 dubbo_demo_consumer/pom.xml 中添加如下配置(核心是添加了接口项目、Dubbo、Zookeeper、Spring 的依赖)。
xml
复制代码
<properties> <spring.version>4.1.9.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>com.yuqiao.deeplearningdubbo</groupId> <artifactId>dubbo_demo_api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.59.Final</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>2.7.4.1</version> </dependency> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.4</version> </dependency> <!--spring--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <!--spring web mvc--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.9</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>4.2.0</version> </dependency> </dependencies>
- 在 dubbo_demo_consumer/src/main/resources 下新建 dubbo_consumer.xml,并填入以下内容(注意要填入自己的 Zookeeper 地址)。
xml
复制代码
<?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://dubbo.apache.org/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <!-- 消费方应用名 --> <dubbo:application name="consumer-app" /> <!-- 使用zookeeper注册中心发现服务 --> <dubbo:registry address="zookeeper://127.0.0.1:2181" /> <!-- 生成远程服务代理,可以和本地bean一样使用demoService --> <dubbo:reference id="demoService" interface="com.yuqiao.deeplearningdubbo.demo.api.DemoService" timeout="1000" retries="0" /> </beans>
- 新建服务消费者的启动类
Consumer
。
java
复制代码
package com.yuqiao.deeplearningdubbo.demo.consumer; import com.yuqiao.deeplearningdubbo.demo.api.DemoService; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Consumer { static ClassPathXmlApplicationContext context; public static void main(String[] args) throws Exception { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"dubbo_consumer.xml"}); context.start(); DemoService demoService = (DemoService)context.getBean("demoService"); // 获取远程服务代理 String result = demoService.sayHello("world"); // 调用远程方法 System.out.println( result ); //打印调用结果 Thread.sleep(10000000l); } }
- 运行
Consumer
,即可成功调用服务消费者,并输出以下结果。
复制代码
Hello world
至此,Dubbo 的环境搭建和基本使用方法,就全部介绍完了。