为什么要用dubbo
dubbo 主要是一个分布式服务治理解决方案,那么什么是服务治理?服务
治理主要是针对大规模服务化以后,服务之间的路由、负载均衡、容错机制、
服务降级这些问题的解决方案,而 Dubbo 实现的不仅仅是远程服务通信,
并且还解决了服务路由、负载、降级、容错等功能。
dubbo的亮点:
缓存:
dubbo 每次都要连 zookeeper?
是不是每次发起一个请求的时候,都需要访问注册中心
呢?作为一个设计者,你会怎么去解决这个问题。
答案很显然是通过缓存实现
在消费端的配置文件中指定如下路径
<dubbo:registry id="zookeeper"
address="zookeeper://192.168.13.102:2181" file="d:/dubbo-server" />
支持多注册中心
配置多个注册中心
<dubbo:registry address="zookeeper://192.168.13.102:2181"
id="registryCenter1"/>
<dubbo:registry address="zookeeper://192.168.13.102:2181"
id="registryCenter2"/>
将服务注册到不同的注册中心
通过 registry 设置注册中心的 ID
<dubbo:service interface="com.gupaoedu.practice.LoginService"
registry="registryCenter1" ref="loginService" />
消费端配置多个注册中心
实现的代码和服务端一样
支持多协议
Dubbo 对于 RPC 通信协议的支持,不仅仅是原生的 Dubbo 协议,它还
围绕着 rmi、hessian、http、webservice、thrift、rest
集成 Webservice 协议
webservice 是一个短链接并且是基于 http 协议的方式来实现的 rpc 框架。
Jar 包依赖
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-simple</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>9.4.19.v20190610</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<version>9.4.19.v20190610</version>
</dependency>
修改 application.xml
<dubbo:protocol name="dubbo" port="20880" />
<dubbo:protocol name="webservice" port="8080" server="jetty"/>
<dubbo:service interface="com.gupaoedu.practice.LoginService"
registry="registryCenter1"
ref="loginService" protocol="dubbo,webservice"/>
添加多协议支持,一个服务可以发布多种协议的支持,也可以实现不同服务
发布不同的协议
启 动 服 务 之 后 , 可 以 使 用 :
http://localhost:8080/com.gupaoedu.practice.LoginService?wsdl 来获得Webservice 的 wsdl 描述文档
客户端使用 webservice 请求服务
- 客户端的配置 jar 包依赖
- 配置多个协议支持,实现方式和服务端一致