一 Dubbo架构概述
dubbo 是阿里开源的一个SOA服务治理框架,从目前来看把它称作是一个RCP远程调用框架更为贴切。单从RPC框架来说,功能较完善,支持多种传输和序列化方案。其核心功能自然就是远程调用。
dubbo架构图示
dubbo执行流程:
- Provider(提供者)绑定指定端口并启动服务
- 指供者连接注册中心,并发本机IP、端口、应用信息和提供服务信息发送至注册中心存储
- Consumer(消费者),连接注册中心 ,并发送应用信息、所求服务信息至注册中心
- 注册中心根据 消费 者所求服务信息匹配对应的提供者列表发送至Consumer 应用缓存。
- Consumer 在发起远程调用时基于缓存的消费者列表择其一发起调用。
- Provider 状态变更会实时通知注册中心、在由注册中心实时推送至Consumer
设计的意义:
- Consumer 与Provider 解偶,双方都可以横向增减节点数。
- 注册中心对本身可做对等集群,可动态增减节点,并且任意一台宕掉后,将自动切换到另一台
- 去中心化,双方不直接依懒注册中心,即使注册中心全部宕机短时间内也不会影响服务的调用
- 服务提供者无状态,任意一台宕掉后,不影响使用
二 基础配置
最基本的是配置两个xml文件,一个服务于Consumer(消费者);一个服务于Provider(提供者)。
提供端:---------------------------
<?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://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="demo-provider"/>
<dubbo:registry protocol="redis" address="192.168.1.66:6379" check="true"/>
<dubbo:protocol name="dubbo" port="20880"/>
<dubbo:provider group="snowman"
threadpool="fixed"
threads="500"
timeout="5000"
retries="2"
/>
<dubbo:service interface="com.snowman.service.DemoService"
timeout="5000"
retries="1"
version="3.0.0"
ref="demoService"/>
<bean id="demoService" class="com.snowman.serviceImpl.DemoServiceImpl"/>
消费端:--------------------
<?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://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="demo-consumer"/>
<dubbo:registry protocol="redis" address="192.168.1.66:6379" check="true"/>
<dubbo:consumer timeout="5000"
retries="2"
group="snowman"
version="1.0.0"/>
<dubbo:reference timeout="3000"
retries="1"
id="demoService"
version="*"
interface="com.snowman.service.DemoService"/>
配置详解
参数说明:
标签 | 属性 | 描述 | 必填 |
---|---|---|---|
application | name | 应用名称 | 是 |
registry | protocol | 注册中心协议 | 是 |
address | 注册中心地址 | 是 | |
provider | threadpool | 线程模型fixed/cache | 否 |
threads | 否 | ||
service | interface | 是 | |
ref | 是 | ||
group | 否 | ||
version | 和消费端一致才能匹配调用 | 否 | |
timeout | 重试次数,是给消费端使用的(没有配的情况下) | 否 | |
retries | 重试次数,(同上) | 否 | |
consumer | timeout | 是 | |
retries | 是 | ||
reference | id | 否 | |
interface | 否 | ||
version | 否 | ||
check | 否 | ||
retries | 重试次数 | 否 |
配置分布图: