六、Dubbo支持的协议
1、Dubbo协议:
1.1 本质:使用NIO和线程池进行处理
1.2 缺点:大文件传输时可能出现文件传输失败的问题
2、RMI协议:
2.1 本质:JDK提供的协议,远程方法调用协议
2.2 缺点:偶尔链接失败
2.3 优点:JDK原生,不需要进行额外配置(导入jar)
3、Hession协议:
3.1 优点:基于HTTP协议,支持http请求
3.2 缺点:需要额外导入jar,并在短连接时性能低
七、Dubbo中Provider搭建
1、新建Maven Project,里面只有接口(
1.1 为什么这么做
RPC框架,不希望Consumer知道具体的实现,如果实现类和接口在同一个项目中,Consumer依赖这个项目时,就会知道这个类的具体实现
2、新建Maven Project ,写接口的实现类(dubbo-service-impl)
3、在dubbo-service-impl中配置pom.xml
3.1 依赖接口
3.2 依赖dubbo,去掉老版本spring
3.3 依赖新版本spring
3.4 依赖Zookeeper客户端zkClient
| <!-- mvnrepository.com/artifact/co… --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> <!-- 去掉dubbo自带的老版本 --> <exclusions> <exclusion> <artifactId>spring</artifactId> <groupId>org.springframework</groupId> </exclusion> </exclusions> </dependency> <!-- mvnrepository.com/artifact/or… --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.1.6.RELEASE</version> </dependency> <!-- 访问Zookeeper的客户端jar包 --> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.10</version> </dependency> |
|---|
4、新建实现类,并实现接口方法
5、新建配置文件applicationContext-dubbo.xml,并配置
5.1 <dubbo:application /> 给provider起别名,在monitor或管理工具中区别是哪个provider
5.2 <dubbo:registry /> 配置注册中心
4.2.1 address : 注册中心的IP和端口
4.2.2 protocol : 只用哪种注册中心
5.3 <dubbo:protocol /> 配置协议
5.3.1 name :使用什么协议
5.3.2 port:comsumer invoke provider时的端口号
5.4 <dubbo:service /> 注册接口
5.4.1 ref:引用接口实现类<bean>的id值
| <beans xmlns= "www.springframework.org/schema/bean…" xmlns:xsi= "www.w3.org/2001/XMLSch…" xmlns:context= "www.springframework.org/schema/cont…" xmlns:dubbo= "code.alibabatech.com/schema/dubb…" xsi:schemaLocation= "www.springframework.org/schema/bean… www.springframework.org/schema/bean…www.springframework.org/schema/cont… www.springframework.org/schema/cont…code.alibabatech.com/schema/dubb… code.alibabatech.com/schema/dubb…" > <!-- 给当前Provider自定义名词 --> <dubbo:application name= "dubbo-service" /> <!-- 配置注册中心 --> <dubbo:registry address= "192.168.0.103:2181" protocol= "zookeeper" ></dubbo:registry> <!-- 配置端口 --> <dubbo:protocol name= "dubbo" port= "21880" ></dubbo:protocol> <!-- 注册功能 --> <dubbo:service interface= "com.project.DemoService" ref= "demoServiceImpl" ></dubbo:service> <bean id= "demoServiceImpl" class= "com.project.impl.DemoServiceImpl" ></bean></beans> |
|---|
6、启动容器
6.1 通过spring方式启动
6.1.1 applicationContext -dubbo.xml位置没有要求
| ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-dubbo.xml"); ac.start(); System.out.println("启动成功"); System.in.read(); |
|---|
6.2 使用dubbo提供的方式启动(推荐使用这种方式)
6.2.1 要求applicationContext-dubbo.xml必须放入类路径下/META-INF/spring/*.xml
7、具体实现看下面
原码:
| package com.project;public interface DemoService { String demo(String name);} package com.project.impl;import com.project.DemoService;public class DemoServiceImpl implements DemoService{ @Override public String demo(String name) { // TODO Auto-generated method stub return "传递过来的Name:"+ name; }} package com.project.test;import java.io.IOException;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.alibaba.dubbo.container.Main;public class Test { public static void main(String[] args) throws IOException {// ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-dubbo.xml");// ac.start();// System.out.println("启动成功");// System.in.read(); //官方推荐 //要求配置文件必须放在/METE-INFO/spring/*.xml Main.main(args); }} applicationContext-dubbo.xml配置文件 <?xml version="1.0" encoding="UTF-8"?><beans xmlns="www.springframework.org/schema/bean… xmlns:xsi="www.w3.org/2001/XMLSch… xmlns:context="www.springframework.org/schema/cont… xmlns:dubbo="code.alibabatech.com/schema/dubb… xsi:schemaLocation="www.springframework.org/schema/bean… www.springframework.org/schema/bean… www.springframework.org/schema/cont… www.springframework.org/schema/cont… code.alibabatech.com/schema/dubb… code.alibabatech.com/schema/dubb… <!-- 给当前Provider自定义名词 --> <dubbo:application name="dubbo-service"/> <!-- 配置注册中心 --> <dubbo:registry address="192.168.0.103:2181" protocol="zookeeper"></dubbo:registry> <!-- 配置端口 --> <dubbo:protocol name="dubbo" port="21880"></dubbo:protocol> <!-- 注册功能 --> <dubbo:service interface="com.project.DemoService" ref="demoServiceImpl"></dubbo:service> <bean id="demoServiceImpl" class="com.project.impl.DemoServiceImpl"></bean></beans> Pom.xml<project xmlns="maven.apache.org/POM/4.0.0" xmlns:xsi="www.w3.org/2001/XMLSch…" xsi:schemaLocation="maven.apache.org/POM/4.0.0 maven.apache.org/xsd/maven-4… <modelVersion>4.0.0</modelVersion> <groupId>com.project</groupId> <artifactId>dubbo-service-impl</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>com.project</groupId> <artifactId>dubbo-service</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!-- mvnrepository.com/artifact/co… --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> <exclusions> <exclusion> <artifactId>spring</artifactId> <groupId>org.springframework</groupId> </exclusion> </exclusions> </dependency> <!-- mvnrepository.com/artifact/or… --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.1.6.RELEASE</version> </dependency> <!-- 访问Zookeeper的客户端jar包 --> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.10</version> </dependency> </dependencies></project> |
|---|