一、Dubbo支持的协议
1、Dubbo协议
优点:是用NIO和线程池进行处理,减少握手和加大并发效率
缺点:大文件传输时,可能出现失败问题
2、Rmi协议
优点:JDK提供的协议,不需要额外配置远程方法调用协议(TCP协议)
缺点:偶尔会连接失败
3、Hessian协议
优点:基于HTTP协议,http请求支持
缺点:需要额外导入jar,并在短连接时性能低
二、Dubbo中Provider搭建
1、新建Maven Project ,里面只有一个接口(dubbo-service)
1.1、为什么这么做
RPC框架不希望Consummer知道具体怎么实现的,如果实现类和接口在
同一个项目中,Consummer依赖这个项目时,就会知道实现类具体实现。
效果图:
1.2、具体代码:
pom.xml:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.newland</groupId> <artifactId>dubbo-service</artifactId> <version>1.0-SNAPSHOT</version> </project> |
DomeService.java接口:
package com.newland.service; /** * @ClassName DemoService * @Description: CSDN GHHCNGC * @Author gh * @Date 2019/9/27 9:10 * @Version V1.0 **/ public interface DemoService { String demo(String name); } |
2、新建Maven Project ,写接口的实现类(dubbo-service-impl)
2.1、效果图
2.2、具体代码
2.2.1、pom.xml
2.2.1.1、依赖接口dubbo-service
2.2.1.2、依赖dubbo,去掉老版本spring
2.2.1.3、依赖新版本spring
2.2.1.4、依赖Zookeeper客户端工具zkClient
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.newland</groupId> <artifactId>dubbo-service-impl</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>com.newland</groupId> <artifactId>dubbo-service</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <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> <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> |
2.2.2、实现接口类,并实现接口方法
2.2.2.1、DemoServiceImpl.java
package com.newland.service.impl; import com.newland.service.DemoService; /** * @ClassName DemoServiceImpl * @Description: CSDN GHHCNGC * @Author gh * @Date 2019/9/27 9:11 * @Version V1.0 **/ public class DemoServiceImpl implements DemoService{ /** * * @param name * @return */ public String demo(String name) { return "传过来的name"+name; } } |
2.2.3、新建配置文件applicationContext-dubbo.xml,并配置
2.2.3.1、<dubbo:application/> 给provider起名字,在monitor或管理工具中区别哪一个是provider
2.2.3.2、<dubbo:registry/>配置注册中心
2.2.3.2.1、address:注册中心的ip和端口
2.2.3.2.2、protocol是用哪种注册中心
2.2.3.3、<dubbo:protocol/>配置协议
2.2.3.3.1、name使用什么协议
2.2.3.3.2、port:consummer invoke provider时的端口号
2.2.3.4、<dubbo:service/>注册借口
2.2.3.4.1、ref 引用借口实现类<bean>的id值
2.2.3.5、applicationContext-dubbo.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:context="http://www.springframework.org/schema/context" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!--给当前Provide自定义名字--> <dubbo:application name="dubbo-service"/> <!--配置注册中心 使用Zookeeper协议 address:--> <dubbo:registry address="192.168.40.1:2181" protocol="zookeeper"></dubbo:registry> <!--配置端口 对应图片中的第四步的 invoke name表示从注册中心中获取 port 端口号可以随意,只要不被占用 通过20880访问计算机--> <dubbo:protocol name="dubbo" port="20880"></dubbo:protocol> <!--注册功能 去registry注册 注册借口的实现类 (一接口写两个标签)(频繁使用)--> <dubbo:service interface="com.newland.service.DemoService" ref="demoServiceImpl"></dubbo:service> <bean id="demoServiceImpl" class="com.newland.service.impl.DemoServiceImpl"></bean> </beans> |
2.2.4、启动容器
2.2.4.1、通过spring方式启动
2.2.4.1.1、对于applicationContext-dubbo.xml的位置没有要求
2.2.4.1.2、DemoServiceTest.java
public class DemoServiceTest { public static void main(String[] args){ ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-dubbo.xml"); ac.start();//这里做的就是流程图中0.start过程 System.out.println("start successful!"); System.in.read(); } |
2.2.4.2、通过dubbo提供的方式启动(推荐)
2.2.4.2.1、要求applicationContext-dubbo.xml配置文件必须放在/META-INF/spring/*.xml
public class DemoServiceTest { public static void main(String[] args){ //官方推荐 //要求配置文件必须放在/META-INF/spring/*.xml Main.main(args); } } |
2.2.5、启动成功