Dubbo(二)实践
安装注册中心:
下载zookeeper,在zookeeper路径下新增date文件夹存储数据,conf路径下新增zoo.cfg,编辑zoo.cfg,修改数据目录dataDir为新增的data文件夹,其他与zoo_sample.cfg一样:
执行bin目录里的zkServer.cmd启动注册中心
启动成功
执行zkCli.cmd ,连接zookeeper注册中心
zookeeper是一个树型的目录服务
get / 获取zookeeper根节点,ls / 查看根节点下的节点,发现zookeeper节点
create -e /zmxqq 123456 在根目录下创建临时节点,并赋值为123456
项目实现:
在分布式项目中,为符合分包原则,可以将公共内容,比如JavaBean、异常、接口等放到单独的工程中去。比如将接口统一写到一个工程中,例如zmxqq-dubbo-interface工程中存放所有的接口,在其他工程比如zmxqq-order-service业务工程如果想要调用接口,就需要在pom.xml中做如下配置,引入接口工程,此时业务工程就可以只关注自己的接口实现。
<dependency>
<groupId>com.zmxqq</groupId>
<artifactId>zmxqq-dubbo-interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
接下来按照Dubbo的流程图来实现dubbo远程通信。即 消费者工程 和 提供者工程 如何建立通信连接。
Dubbo流程中各个模块的配置【ssm项目——通过xml配置】
-
导入Dubbo依赖,在提供者工程的
pom.xml
<dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.8.4</version> </dependency>
-
引入注册中心zookeeper客户端(或其他注册中心)curator或zkclient
pom.xml
<dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>3.4.6</version> </dependency>
-
配置服务提供者provider ,在提供者工程的
spring.xml
文件中① 指定当前服务/应用的名字
spring.xml
<!-- dubbo配置 --> <!-- 提供者应用信息,用于订单处理 --> <dubbo:application name="dubbo-service-order" />
② 注册服务提供者到注册中心,指定注册中心的位置
spring.xml
<!-- 使用zookeeper注册中心暴露服务地址 --> <dubbo:registry address="zookeeper://127.0.0.1:2181" />
③dubbo协议在哪个端口暴露服务
spring.xml
<dubbo:protocol name="dubbo" port="20880" />
④声明需要暴露的服务接口 ,这样消费者就可以调用这个服务
spring.xml
<!-- 声明需要暴露的服务接口,ref指向服务的真正实现对象 --> <dubbo:service interface="org.apache.dubbo.demo.DemoService" ref="demoService" />
<!-- 服务的实现,相当于本地的一个bean,可以通过@Autowired等注入 --> <bean id="demoService" class="org.apache.dubbo.demo.provider.DemoServiceImpl" />
【也可以在
dubbo.properties
中配置好注册中心地址和通信端口号,再使用${}动态指定。例如:】dubbo.properties
zookeeper.address=zookeeper://127.0.0.1:2181 dubbo.port=20880
spring.xml
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:config/dubbo.properties</value> </list> </property> </bean> <dubbo:protocol name="dubbo" port="${dubbo.port}" />
-
配置消费者consumer,同样在消费者工程的
pom.xml
中导入Dubbo依赖,引入zookeeper客户端。此处的spring.xml
为消费者工程中的配置文件,与3不同。①指定当前服务/应用的名字
spring.xml
<dubbo:application name="dubbo-service-order" />
② 注册消费者到注册中心,指定注册中心的位置
spring.xml
<!-- 使用zookeeper注册中心暴露服务地址 --> <dubbo:registry address="zookeeper://127.0.0.1:2181" />
③声明需要调用的远程服务的接口
spring.xml
<dubbo:reference id="demoService" interface="org.apache.dubbo.demo.DemoService" />
这样,注册中心的demoService接口就可以在消费者工程里通过@Autowired等注入并使用了。