超详细的springboot、dubbo、zookeeper项目搭建教程
项目结构
- 新建一个springboot项目
- 新建三个modle都为maven项目,这里把service接口和服务实现类分开了,consumer是消费端,我的项目结构如下
最外层的pom.xml
<groupId>com.yinhai</groupId>
<artifactId>sddemo</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>service</module>
<module>iml</module>
<module>consumer</module>
</modules>
引入spring-boot-starter以及dubbo和curator的依赖
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
服务端
service接口
<parent>
<artifactId>sddemo</artifactId>
<groupId>com.yinhai</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>service</artifactId>
创建一个interface
public interface DemoService {
public String sayHai();
}
服务实现类
service以依赖注入
<parent>
<artifactId>sddemo</artifactId>
<groupId>com.yinhai</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>iml</artifactId>
<dependencies>
<dependency>
<groupId>com.yinhai</groupId>
<artifactId>service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
创建实现类DemoServiceiml,@Service注解是dubbo用于声明provider的注解
@Service
public class DemoServiceiml implements DemoService {
@Override
public String sayHai() {
return "sayHai!";
}
}
创建启动类,注册服务
@SpringBootApplication
@EnableDubbo
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
在resouce下创建application.properties
server.port=8082
#当前服务/应用的名字
dubbo.application.name=ServiceProvider
#注册中心的协议和地址
dubbo.registry.protocol=zookeeper
dubbo.registry.address=127.0.0.1
dubbo.registry.port=2181
dubbo.registry.check=false
dubbo.registry.register=true
#通信规则(通信协议和接口)
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
#连接监控中心
dubbo.monitor.protocol=registry
dubbo.provider.host=127.0.0.1
dubbo.scan.base-packages=com.yinhai.iml
消费端
pom.xml引入接口依赖
<parent>
<artifactId>sddemo</artifactId>
<groupId>com.yinhai</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>consumer</artifactId>
<dependencies>
<dependency>
<groupId>com.yinhai</groupId>
<artifactId>service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
创建一个controller作为消费入口,其中@Reference用于跨服调用
@RestController
public class DemoController {
@Reference
private DemoService demoService;
@GetMapping(value = "/print")
public String print(){
String s=demoService.sayHai();
return s;
}
}
创建启动类
@SpringBootApplication
@EnableDubbo
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
在resouce下创建application.properties
#避免和监控中心端口冲突,设为8081端口访问
server.port=8081
dubbo.application.name=service-consumer
#注册中心的协议和地址
dubbo.registry.protocol=zookeeper
#集群用逗号隔开
dubbo.registry.address=127.0.0.1
dubbo.registry.port=2181
dubbo.registry.subscribe=true
#通信规则(通信协议和接口)
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
dubbo.protocol.host=127.0.0.1
dubbo.registry.check=false
dubbo.consumer.timeout=60000
测试
- 启动zookeeper
- 启动dubbo
- 启动服务端注册服务
- 启动消费端
撒花!成功啦!