- 接口工程:存放实体bean和业务接口
- 服务提供者:业务接口的实现类并将服务暴露且注册到注册中心,调用数据持久层
- 添加依赖:dubbo,注册中心,接口工程
- 配置服务提供者核心配置文件
- 服务消费者:处理浏览器客户端发送的请求,从注册中心调用服务提供者所提供的服务
- 添加依赖:dubbo,注册中心,接口工程
- 配置服务消费者核心配置文件
同样还是需要三个工程
interface不需要是springboot项目,简单maven项目就可以,只是为了写接口,provider和consumer需要被加载到容器中,所以还是Springbootweb项目。provider和consumer的依赖一样:
<!-- 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.11</version>
</dependency>
<!-- 接口工程-->
<dependency>
<groupId>cn.youkee</groupId>
<artifactId>06-springboot-dubbo-interface</artifactId>
<version>1.0.0</version>
</dependency>
具体的写法和之前差不多,还是provider实现接口工程中的方法,然后consumer调用provider提供的方法实现。只是现在不需要那么多配置文件了,只用在核心文件中简单配置一下:
provider的核心配置文件
server.port=8081
server.servlet.context-path=/
# 设置dubbo的配置
spring.application.name=07-dubbo-provider
# 当前工程是一个服务提供者
spring.dubbo.server=true
# 注册中心
spring.dubbo.registry=zookeeper://192.168.3.28:2181
consumer的核心配置文件
server.port=8080
server.servlet.context-path=/
# 设置dubbo配置
spring.application.name=08-dubbo-consumer
# 指定注册中心
spring.dubbo.registry=zookeeper://192.168.3.28:2181
这里zookeeper配在了本地的虚拟机上,也可以配云服务器上,最近腾讯云抽风就没有搞。zookeeper在linux上的配置也不麻烦,先装jdk1.8,然后下载zookeeper的压缩包解压,按之前的配置文件写法改一下。再进入bin文件夹下zkServer.sh start就可以了。
可以明显看到配置文件里少了之前暴露服务和引用服务的配置,因为集成SpringBoot后也可以用注解的方式完成这两个配置:
provider中StudentServiceImpl,实现了接口工程中的StudentService
@Component // 被Spring扫描到容器中
@Service(interfaceClass = StudentService.class, version = "1.0.0", timeout = 15000)
// 注意用dubbo的service注解,表明这是一个dubbo服务
public class StudentServiceImpl implements StudentService {
@Override
public Integer queryStudentCount() {
return 6666;
}
}
consumer中StudentController,引用StudentService服务
@Controller("studentController")
public class StudentController {
// 注意用dubbo的注解,表明这是一个消费者,要引用一个服务
// check表明在消费者开启的时候是否检查有这个服务,false表示调用的时候再检查
@Reference(interfaceClass = StudentService.class, version = "1.0.0", check = false)
private StudentService studentService;
@RequestMapping("/student")
public @ResponseBody String studentCount() {
return "学生总人数:" + studentService.queryStudentCount();
}
}
这里一定要注意,@Service和@Reference要导入com.alibaba包下的,这样才能完成Dubbo的暴露服务和引用服务。
至此Application类还不知道加入的Dubbo配置,所以**分别在provider和consumer的Application类上添加@EnableDubboConfiguration,表明开启Dubbo的配置**,因为@SpringBootApplication只能开启Spring的配置,Dubbo的它是扫不到的。
然后分别运行provider和consumer,通过student请求,查看效果,别忘了开zookeeper,不然会报错。