Dubbo(1)------搭建环境并使用
前言
Dubbo是阿里巴巴公司开源的一个优秀的RPC服务框架,它可以和Spring无缝集成.对其作用相信很多java开发者都有所了解,所以我们直接来开始使用.
正文
1. 了解架构,搭建环境
在Dubbo的官方有这样一个图:
以上是Dubbo的架构图,上图各节点的解释如下:
节点 | 角色说明 |
---|---|
Provider | 暴露服务的服务提供方 |
Consumer | 调用远程服务的服务消费方 |
Registry | 服务注册与发现的注册中心 |
Monitor | 统计服务的调用次数和调用时间的监控中心 |
Container | 服务运行容器 |
根据以上的图,我们知道,要使用Dubbo,就要先启动一个Registry,启动一个Monitor.参考Dubbo的官方,推荐我们使用Zookeeper来作为注册中心.
2. 安装启动注册中心
我们可以去Zookeeper的官网去下载对应的版本:Zookeeper下载
在这里我们使用3.4.13版本的zookeeper,直接在本机windows中使用即可.
下载Zookeeper后解压会得到如下的文件:
bin目录下就是各种启动命令.
需要注意的是,如果第一次启动会报错,这是因为在conf目录中没有找到zookeeper的配置文件,我们打开conf目录,发现里面有一个zoo_samole.cfg
文件,复制改名为zoo.cfg
即可,再次启动就可以正常运行:
如果有需要,也可以修改zookeeper配置文件中的一些参数:
dataDir参数代表zookeeper的临时文件的存放目录,默认是/tmp/zookeeper
,可以自定义存储目录.
3. 安装、启动监控中心
启动了注册中心,我们接着来构建和启动注册中心,其实监控中心是可选,如果不使用我们也可以正常的运行dubbo完成服务的发布,在这里我们安装启动作为了解.
首先我们去Dubbo的github仓库中下载项目:incubator-dubbo-ops
,下载完成后,进入该项目的dubbo-admin目录中,执行maven命令:mvn clean package
,执行成功后就会在target文件夹中得到一个dubbo-admin-0.0.1-SNAPSHOT
的jar,这个jar就是我们dubbo的控制台.在cmd窗口中执行java命令,以jar的方式来启动该项目.
启动完成后我们在浏览器中访问:http://localhost:7001/
,注意,这个端口号是在dubbo-admin项目的配置文件中指定的,如果想更换,要在打包前修改配置文件.
下面就是我们dubbo-admin控制台的管理WEB页面:
第一次访问的时候会提示要求输入账号和密码,直接使用root登陆即可.
上面就是我们的控制台,我们可以在该页面管理和查看我们的dubbo服务,2.7版本以后的dubbo控制台有所改变,这个我们在后面再细说.
4. 编写服务提供者
经过以上的步骤,我们的注册中心和监控中心就搭建好了,下面我们来写一个服务提供者,用于提供服务接口给其他的项目使用.
-
新建一个maven项目,添加maven依赖
<properties> <dubbo.version>2.7.1</dubbo.version> </properties> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>${dubbo.version}</version> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-zookeeper</artifactId> <version>${dubbo.version}</version> <type>pom</type> </dependency>
-
编写服务接口和实现类:
接口:
/** * 用户接口定义 */ public interface UserService { User getUserByName(String name); }
实现类:
public User getUserByName(String name) { User user = new User(); user.setName(name); user.setGender("男"); user.setAddress("纯阳宫101号"); return user; }
还有接口中使用到的实体类User
public class User { private String name; private String address; private String gender; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", address='" + address + '\'' + ", gender='" + gender + '\'' + '}'; } }
-
配置该服务,注册到注册中心
因为dubbo的jar中依赖了spring的相关jar,我们可以使用spring的方式来配置我们的服务,在上面2步的基础上,我们在
resources
目录下新建一个配置文件provider.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.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <!--定义当前引用的名称--> <dubbo:application name="user-provider"></dubbo:application> <!--指定注册中心的位置--> <dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry> <!--指定通信协议和端口号--> <dubbo:protocol name="dubbo" port="20880"></dubbo:protocol> <!--暴露服务--> <dubbo:service interface="com.xiaojian.service.UserService" ref="orderService"></dubbo:service> <!--指定服务的实现--> <bean id="orderService" class="com.xiaojian.service.impl.UserServiceImpl"></bean> </beans>
以上文件中详细写明了暴露服务的相关配置,依次配置好以后,我们编写一个启动类,加载配置文件.
public class ProviderApp { public static void main(String[] args) throws IOException { ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("provider.xml"); applicationContext.start(); System.in.read(); } }
服务启动以后,我们就可以在管理中心查看到我们暴露的服务了:
5. 编写服务消费者
完成了服务的发布以后,我们需要一个消费者来使用这个服务.
-
创建maven工程,引入依赖:
<properties> <dubbo.version>2.7.1</dubbo.version> </properties> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>${dubbo.version}</version> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-zookeeper</artifactId> <version>${dubbo.version}</version> <type>pom</type> </dependency>
和前面的服务提供者的依赖是一样的.
-
编写业务类,并且引入服务提供者暴露服务的接口和相关的javaBean
实现类:
@Service public class OrderServiceImpl implements OrderService{ @Autowired private UserService userService; public void createOrder() { User user = userService.getUserByName("剑小纯"); System.out.println(user); } }
接口:
public interface OrderService { void createOrder(); }
-
创建配置文件
consumer.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" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--指定消费者的应用名--> <dubbo:application name="order-consumer"></dubbo:application> <!--指定注册中心的地址--> <dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry> <!--声明需要调用的远程服务的接口,会生成远程服务的代理--> <dubbo:reference interface="com.xiaojian.service.UserService" id="userService"></dubbo:reference> <!--开启spring注解扫描--> <context:component-scan base-package="com.xiaojian.service.impl"></context:component-scan> </beans>
-
编写启动类,测试服务的调用:
public class AppApplication { public static void main(String[] args) throws IOException { System.out.println("容器启动..."); ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("consumer.xml"); applicationContext.start(); //UserService userService = (UserService) applicationContext.getBean("userService"); OrderService orderService = applicationContext.getBean(OrderService.class); orderService.createOrder(); System.out.println("远程调用结束..."); System.in.read(); } }
测试可以发现,服务是可以使用的:
我们打开dubbo的管理中心,也可以看到服务的消费者和提供者:
至此,我们的远程服务的暴露和使用就彻底完成了,虽然是一个普通的小demo,但是也涵盖了dubbo的使用流程,对于我们熟悉dubbo还是很有帮助的.
6. 配置监控中心
在dubbo的使用中,除了可以在dubbo的服务管理页面来查看和管理我们的服务,还可以使用监控中心来查看各类服务的调用情况,在dubbo的incubator-dubbo-ops-master
的项目中,为我们提供了一个简单的监控中心:dubbo-monitor-simple
,我们可以为我们的服务来配置使用这个监控中心.
-
将
dubbo-monitor-simple
项目使用maven命令打包打包成功以后再target目录下我们会得到两个文件:
dubbo-monitor-simple-2.0.0
和dubbo-monitor-simple-2.0.0-assembly.tar
-
将
dubbo-monitor-simple-2.0.0-assembly.tar
解压,进入解压后的文件夹,找到conf
目录,修改该目录下的dubbo
配置文件,主要是修改其中的注册中心的IP地址:dubbo.registry.address
,该文件中可以指定监控中心的通信端口,默认是7070. -
进入
bin
目录,运行start.bat
文件,启动监控中心: -
在服务的提供者和消费者的配置文件中配置监控中心的地址:
<!--配置监控中心--> <dubbo:monitor protocol="registry"></dubbo:monitor> <!--<dubbo:monitor address="127.0.0.1:7070"></dubbo:monitor>-->
配置好以后重启服务提供者和消费者,监控中心的配置就完成了.
监控中心配置完成以后,服务的调用情况等信息都可以在监控中心进行查看,可以很直观的对我们的每一个服务进行调优分析.
总结
dubbo的简单使用就说到这里,其他具体的详细使用可以在dubbo的官方文档中去查看,同样有中文版的文档,很是方便.