--- 用于大规模服务化,通过在消费方获取服务提供方的地址列表,实现负载均衡,减轻服务器压力。
最简单调用图
节点角色说明:
l Provider: 暴露服务的服务提供方。
l Consumer: 调用远程服务的服务消费方。
l Registry: 服务注册与发现的注册中心。
l Monitor: 统计服务的调用次调和调用时间的监控中心。
l Container: 服务运行容器。
调用关系说明:
l 0. 服务容器负责启动,加载,运行服务提供者。
l 1. 服务提供者在启动时,向注册中心注册自己提供的服务。
l 2. 服务消费者在启动时,向注册中心订阅自己所需的服务。
l 3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
l 4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
l 5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
简单用法
需与spring集成(也可以调用api,但官方不推荐,且代码臃肿)。
Java代码跟正常功能一样,只需要一个接口和一个实现类,像正常spring一样配置。
需要详细说明的是xml配置:
提供者(服务端):
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans 6 http://www.springframework.org/schema/beans/spring-beans.xsd 7 http://code.alibabatech.com/schema/dubbo 8 http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> 9 10 <!-- 提供方应用信息,用于计算依赖关系 --> 11 <dubbo:application name="ushop-service-mall" /> 12 13 <!-- 使用zookeeper注册中心暴露服务地址 --> 14 <dubbo:registry protocol="zookeeper" address="XXXX(zookeeper服务IP)" /> 15 16 <!-- 监控中心配置,protocol="registry",表示从注册中心发现监控中心地址 --> 17 <dubbo:monitor protocol="registry"/> 18 19 <!-- 当ProtocolConfig和ServiceConfig某属性没有配置时,采用此缺省值 --> 20 <dubbo:provider timeout="60000" threadpool="fixed"/> 21 <dubbo:protocol threads="200" name="dubbo" port="20880"/> 22 <!-- 需要提供的服务 --> 23 <dubbo:service executes="200" retries="0" interface="com.XXX.facade.XXXFacade" ref="xXXFacade" /> 24 25 26 </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://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="ProjectName" /> <!-- 使用zookeeper注册中心暴露服务地址 --> <!-- 多注册中心配置,竖号分隔表示同时连接多个不同注册中心,同一注册中心的多个集群地址用逗号分隔 --> <!-- 注册中心地址 --> <dubbo:registry protocol="zookeeper" address="XXXX(zookeeper服务IP)" /> <!-- 监控中心配置,protocol="registry",表示从注册中心发现监控中心地址 --> <dubbo:monitor protocol="registry"/>
<!-- 需要调用的服务 --> <dubbo:reference interface="com.XXX.facade.XXXFacade" id="xXXFacade" check="false" /> </beans>
代码简单解释(配置项暂不说明):
l 在服务端只需用
<dubbo:service executes="200" retries="0" interface="com.XXX.facade.XXXFacade" ref="xXXFacade" />
这段配置来暴露服务的接口,ref的值是spring配置的bean。
l 在客户端
<dubbo:reference interface="com.XXX.facade.XXXFacade" id="xXXFacade" check="false" />,来声明一个spring的bean,然后可以在需要的地方获取这个bean,接着直接调用该接口的所有方法。
时间: 2024-10-14 17:49:25