duboo+zookeeper的入门心得
经历了一下午的调试,duboo+zookeeper的入门helloworld程序终于可以跑起来了,实属难得!中间遇见好几个坑,我觉得我有必要记录并分享一下,也算是对dubbo和zk的一点整理。
技术栈正如标题,基于dubbo的远程RPC调用,使用zookeeper注册中心,建立起SpringBoot项目集成。
资源环境下载我就不多此一举了,只需要注意zk的版本即可,我此次用的就是zk:apache-zookeeper-3.5.9-bin
1.项目搭建(Idea)
在Idea中创建一个新项目,因为考虑到是远程调用,所有父项目可以是任意项目,无须web,无须springboot。
在父项目新建2个模块,2个module以springboot项目建立,分别是server-provider和server-customer,分别作为dubbo的服务提供者和项目消费者。
其中2个项目的pom.xml文件导入的依赖如下:
<!--服务提供者不需要使用controller,可以不要web的starter-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--Dubbo-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.3</version>
</dependency>
<!--zookeeper-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
<type>pom</type>
</dependency>
<!--zkclient zk客户端连接-->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
<!--解决zookeeper的依赖冲突的jar包-->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.13.0</version>
</dependency>
另外,服务提供者的java的service层逻辑代码和配置文件application.properties的配置如下:
package com.kk.service;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
@Service
@Component
public class ProviderServiceImpl implements ProviderService{
@Override
public void service() {
System.out.println("服务提供者提供了服务!");
}
}
注意@Service导入的是org.apache.dubbo.config.annotation.Service,而不是Spring的@Service
# 服务提供者的name
dubbo.application.name=provider-server
# 服务注册的地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
# 使用的协议(dubbo)
dubbo.protocol.name=dubbo
# 在20880端口暴露dubbo服务
dubbo.protocol.port=20880
# dubbo扫描的包(服务提供的全限定包名)
dubbo.scan.base-packages=com.kk.service
# 该模块的启动端口,单机使用dubbo需要改端口
server.port=8081
此外,服务消费者的java代码和application.properties的配置如下:
package com.kk.service;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;
@Service
public class CustomerServiceImpl {
@Reference
private ProviderService providerService;
public void service(){
providerService.service();
System.out.println("消费者的service方法");
}
}
消费者的Controller层和SpringMVC中的一样,进行简单调用就行
dubbo.application.name=customer-server
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=20881
dubbo.scan.base-packages=com.kk.service
server.port=8082
spring.main.allow-bean-definition-overriding=true
2.服务开启
开启zookeeper的服务端,ZkServer.cmd
开启dubbo-admin管理页,
开启服务提供者,
开启服务消费者,
访问服务消费者的controller界面即可