- 接口工程
- 服务提供者工程
- 服务消费者工程
1、创建一个maven java工程,作为接口工程
接口工程中主要用于存放所有的实体bean和业务接口
集成dubbo框架中的实体类必须全部实现Serializable序列化接口
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<scope>provided</scope>
</dependency>
2、创建一个springboot web工程,作为服务提供者provider
这个工程中主要用来实现所有的业务接口,并且将需要暴露的业务接口注册到注册中心
2.1 引入依赖
provider工程中,除了springboot自动引入的web依赖,还需要额外引入dubbo依赖、注册中心的依赖、接口工程的依赖
<!--springboot的web起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--dubbo集成springboot依赖-->
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<!--注册中心依赖-->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
<!--接口工程依赖-->
<dependency>
<groupId>com.kw</groupId>
<artifactId>001-springboot-dubbo-interface</artifactId>
<version>1.0.0</version>
</dependency>
2.2 配置dubbo服务提供者
在springboot项目中,dubbo的配置在springboot核心配置文件application.properties中进行配置
#配置项目tomcat端口号
server.port=8081
#配置项目的上下文路径
server.servlet.context-path=/
#配置dubbo服务提供者核心配置
#声明dubbo服务提供者的名称:保证唯一性
spring.application.name=001-springboot-dubbo-provider
#声明这个工程是dubbo的服务提供者
spring.dubbo.server=true
#设置注册中心的地址和端口
spring.dubbo.registry=zookeeper://localhost:2181
2.3 编写接口实现类
在springboot项目中,编写完接口实现类之后,需要在实现类上添加@Component注解,表示将实现类加入到spring容器中。
这个注解就相当于maven web项目中,在dubbo服务提供者核心配置文件中配置的
<bean id="userService" class="com.kw.service.impl.UserServiceImpl"></bean>
然后通过配置将接口注册到注册中心进行暴露
@Service(interfaceClass = UserService.class,version = "1.0.0",timeout = 15000)
这个配置就相当于maven web项目中,在dubbo服务提供者核心配置文件中配置的
dubbo:service interface="",version="",timeout=""
@Component
@Service(interfaceClass = UserService.class,version = "1.0.0",timeout = 15000)
//dubbo:service interface="",version="",timeout=""
public class UserServiceImpl implements UserService {
//正常业务是在业务层需要引入持久层获取数据
@Override
public User getUserById(int id) {
User user=new User();
user.setId(1);
user.setUsername("admin");
user.setPassword("123");
return user;
}
@Override
public int CountUsers() {
return 200;
}
}
2.4 开启dubbo注解配置
在springboot启动配置类上添加@EnabledubboConfiguration注解,表示开启了dubbo注解配置
@SpringBootApplication //开启spring注解配置
@EnabledubboConfiguration //开启dubbo注解配置
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
3、创建一个springboot web工程,作为服务消费者consumer
这个工程中主要用来处理前端业务请求
3.1 引入依赖
<!--springboot的web起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--dubbo集成springboot依赖-->
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<!--注册中心依赖-->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
<!--接口工程依赖-->
<dependency>
<groupId>com.kw</groupId>
<artifactId>001-springboot-dubbo-interface</artifactId>
<version>1.0.0</version>
</dependency>
3.2 配置dubbo服务消费者
在springboot项目中,dubbo的配置在springboot核心配置文件application.properties中进行配置
#设置项目默认端口
server.port=8082
#设置上下文路径
server.servlet.context-path=/
#配置dubbo
#设置dubbo服务消费者名称:保证唯一性
spring.application.name=002-springboot-dubbo-consumer
#设置注册中心的地址和端口号
spring.dubbo.registry=zookeeper://localhost:2181
3.3 编写controller层代码
在控制层需要引入注册中心暴露的接口,在引入的接口上添加以下配置
@Reference(interfaceClass = UserService.class,version = "1.0.0",check = false)
@RestController
public class UserController {
@Reference(interfaceClass = UserService.class,version = "1.0.0",check = false)
UserService userService;
@RequestMapping("/user")
public User getUserById(int id){
User user=userService.getUserById(id);
return user;
}
@GetMapping("/userCount")
public String countUsers(){
return "当前总人数为:"+userService.CountUsers();
}
}
3.4 开启dubbo注解扫描
在springboot启动配置类上添加@EnabledubboConfiguration注解,表示开启了dubbo注解配置
@SpringBootApplication //开启spring注解配置
@EnabledubboConfiguration //开启dubbo注解配置
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}