你是否和我一样,每天进步一点,不断变强
介绍
Dubbo 一个高性能的Java RPC的开源框架,一开始是阿里开源在GitHub上的,后来托管给了Apache,Dubbo的开发文档非常详细易懂,对开发者很友好,Dubbo官网,核心图:
- RPC:Remote Procedure Call,远程调用,具体介绍
- Provider:服务的提供者,暴露服务
- Registry:注册中心,负责服务的注册以及服务事件的发布和订阅
- Consumer:消费者,调用服务方
- Monitor:服务监控中心,非必须
下载注册中心,推荐ZooKeeper
开发文档
下载ZooKeeper压缩包后解压,进入bin路径,cmd下运行zkServer.cmd
报错:进入conf文件夹,复制zoo_sample.cfg,粘贴后重命名zoo.cfg,再次运行
如图,启动成功,验证:bin目录下cmd运行zkCli.cmd
安装dubbo-ops
- 在github下下载压缩包,解压,进入dubbo-admin,这是一个Spring Boot下的项目
- 在项目路径使用maven打包成jar,启动项目
- 在浏览器打开端口,输入账号密码,如图
注意事项:此操作需要在ZooKeeper启动下才能成功,不知道端口等配置去项目文件查看,注意application.properties文件下的dubbo.registry.address配置应该和上一步一样
入门开发(idea下)
新建maven父子项目,3个子项目,Provider、Consumer以及中间方
中间方主要存放实体类和接口
**注意:实体类需要继承序列化,不然运行测试会报错**
Provider,服务的提供者
-
在pom.xml引入依赖,由于需要实现中间方的接口,所以也需要一并引入中间方依赖,这便是为什么要用到maven的父子项目
<dependency> <groupId>denny.dubbo</groupId> <artifactId>gmall</artifactId> <version>1.0-SNAPSHOT</version> <scope>compile</scope> </dependency> <!-- 引入dubbo --> <!-- https://mvnrepository.com/artifact/com.alibaba/dubbo --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.6.2</version> </dependency> <!-- 注册中心使用的是zookeeper,引入操作zookeeper的客户端端 --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.12.0</version> </dependency>
-
配置provider.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://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="hello-world-app" /> <!-- 使用multicast广播注册中心暴露服务地址 --> <dubbo:registry address="multicast://224.5.6.7:1234" /> <!-- 用dubbo协议在20880端口暴露服务 --> <dubbo:protocol name="dubbo" port="20880" /> <!-- 声明需要暴露的服务接口 --> <dubbo:service interface="org.apache.dubbo.demo.DemoService" ref="demoService" /> <!-- 和本地bean一样实现服务 --> <bean id="demoService" class="org.apache.dubbo.demo.provider.DemoServiceImpl" /> </beans>
我的配置:
<?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"> <!-- 1、指定当前服务/应用的名字(同样的服务名字相同,不要和别的服务同名) --> <dubbo:application name="provider"></dubbo:application> <!-- 2、指定注册中心的位置 --> <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry> <!-- 3、指定通信规则(通信协议?通信端口) --> <dubbo:protocol name="dubbo" port="20882"></dubbo:protocol> <!-- 4、暴露服务 ref:指向服务的真正的实现对象 --> <dubbo:service interface="service.UserService" ref="userServiceImp" ></dubbo:service> <!-- 服务的实现 --> <bean id="userServiceImp" class="service.impl.UserServiceImpl"></bean> <!-- 监控中心自动注册 --> <dubbo:monitor protocol="registry"></dubbo:monitor> </beans>
-
测试
新建MainApplication.java,启动项目public class MainApplication { public static void main(String[] args) throws IOException { ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("provider.xml"); classPathXmlApplicationContext.start(); System.in.read(); } }
配置成功
Consumer,服务的消费者
- 同理,引入依赖
-
配置consumer.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://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-4.3.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"> <context:component-scan base-package="service.impl"></context:component-scan> <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 --> <dubbo:application name="consumer"></dubbo:application> <!-- 使用multicast广播注册中心暴露发现服务地址 --> <dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry> <!-- 生成远程服务代理,可以和本地bean一样使用demoService --> <dubbo:reference id="userService" interface="service.UserService" /> <dubbo:monitor protocol="registry"></dubbo:monitor> </beans>
-
测试
新建MainApplication.java,主要和上方测试一样,不过这里需要调用你的Service方法,启动项目public class MainApplication { public static void main(String[] args) throws IOException { ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("consumer.xml"); OrderService orderService = applicationContext.getBean(OrderService.class); orderService.initOrder(); System.out.println("调用完成...."); System.in.read(); } }
在控制台有输出便成功,同样可以去注册中心查看
Spring Boot 配置
-
依赖
<dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.0</version> </dependency>
- provider中的service注解配置
@Service是dubbo的注解
@Component代替Spring boot的Service注解 - consumer中的service主动引入
- 在启动文件中都需要加入@EnableDubbo注解,代表开启Dubbo
仅记录Dubbo入门学习,肯定学习观看开发文档
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。