架构图
- 订单服务注册到zk
- 用户服务通过zk得到订单服务的调用地址
- 用户服务调用订单服务
流程图
代码实现
order-provider.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: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">
<!--name:当前项目在整个分布式架构里面的唯一名称,owner:项目维护者-->
<dubbo:application name="order-provider" owner="lucky"/>
<!--registry: 配置注册中心的信息,address:是注册中心的地址,
这里我们配置的是 N/A 表示由 dubbo 自动分配地址。或者说是一种直连的方式,不通过注册中心-->
<!--<dubbo:registry address="N/A"/>-->
<dubbo:registry protocol="zookeeper" address="localhost:2181"/>
<!--protocol:服务发布的时候 dubbo 依赖什么协议,可以配置 dubbo、webserovice、Thrift、Hessain、http等协议-->
<dubbo:protocol name="dubbo" port="20880"/>
<dubbo:service interface="com.lucky.api.IOrderServices"
ref="orderServices"/>
<bean id="orderServices"
class="com.lucky.facade.impl.OrderServicesImpl"/>
</beans>
对比可以看出,在dubbo:registry
标签中使用了zookeeper
代替了N/A
,如果是集群的话可以使用如下形式
<dubbo:registry protocol="zookeeper" address="192.168.11.129:2181,192.168.11.137:2181,192.168.11.138:2181"/>
这样订单服务的配置就好了。
order-consumer.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: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="order-consumer" owner="lucky"/>
<dubbo:registry protocol="zookeeper" address="localhost:2181" />
<!--点对点方式-->
<!--<dubbo:reference id="orderProvider"-->
<!--interface="com.lucky.api.IOrderServices"-->
<!--url="dubbo://192.168.31.108:20880/com.lucky.api.IOrderServices"/>-->
<!--生成一个远程服务的调用代理 -->
<dubbo:reference id="orderProvider"
interface="com.lucky.api.IOrderServices"/>
</beans>
- 首先注册中心的配置,注册到zookeeper
- 然后,dubbo:reference的配置,由于我们这里使用 zookeeper 作为注册中心,所以,跟点对点的方式是不一样的,这里不再需要 dubbo 服务端提供的 url 了,只需要直接引用服务端提供的接口即可