1.写在前面
这里我来总结一下SpringBoot集成Dubbo的小案例,那么有关Dubbo的内容,就不多说了,可以参考下面这张图中的分栏中的文章。
下面,来说一说SpringBoot集成Dubbo分布式框架的一个思路:
首先了话,仍然需要三个工程。
· 接口工程:存放实体bean和业务接口
· 服务提供者:业务接口的实现类,同时将服务暴露,注册到注册中心zookeeper,调用数据持久层(dao)
a. pom文件中添加依赖(dubbo、注册中心zookeeper、接口工程)
b. 配置服务提供者的dubbo核心配置文件。
· 服务消费者:处理浏览器客户端发来的请求,从注册中心调用服务提供者所提供的服务。
a. pom文件中添加依赖(dubbo、注册中心zookeeper、接口工程)
b. 配置服务消费者的dubbo核心配置文件。
那么,为了简单起步,这里我不再写实体bean了,也不再调用数据持久层了,就做一个简单的模拟案例吧。
2.案例分析
2.1 接口工程
业务接口
package com.szh.springboot.service; /** * */ public interface StudentService { Integer queryAllStudentCount(); }
2.2 服务提供者
SpringBoot核心配置文件
# 配置内嵌tomcat的端口号和上下文跟 server.port=8081 server.servlet.context-path=/ # 配置Dubbo # 声明dubbo服务提供者的名称:保证唯一性 spring.application.name=012-springboot-dubbo-provider # 当前工程是一个服务提供者 spring.dubbo.server=true # 设置注册中心的地址端口号 spring.dubbo.registry=zookeeper://localhost:2181
对业务接口方法的实现。@Component注解表示将该实现类加载到Spring容器中。@Service注解(这个注解和Spring下的@Service注解不一样,它是dubbo下属的直接)interface指的是暴露接口服务,version是版本号,timeout是超时时间。
package com.szh.springboot.service.impl; import com.alibaba.dubbo.config.annotation.Service; import com.szh.springboot.service.StudentService; import org.springframework.stereotype.Component; /** * */ @Component @Service(interfaceClass = StudentService.class,version = "1.0.0",timeout = 15000) public class StudentServiceImpl implements StudentService { @Override public Integer queryAllStudentCount() { return 666; } }
pom文件
<!-- 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> <!-- 注册中心zookeeper --> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.4</version> </dependency> <!-- 接口工程 --> <dependency> <groupId>com.szh.springboot</groupId> <artifactId>011-springboot-dubbo-interface</artifactId> <version>1.0.0</version> </dependency>
最后是SpringBoot项目启动入口类
package com.szh.springboot; import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication //开启Spring注解配置 @EnableDubboConfiguration //开启Dubbo注解配置 public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
2.3 服务消费者
SpringBoot核心配置文件
# 配置内嵌tomcat的端口号和上下文跟 server.port=8080 server.servlet.context-path=/ # 配置Dubbo # 声明dubbo服务消费者的名称:保证唯一性 spring.application.name=013-springboot-dubbo-consumer # 设置注册中心的地址端口号 spring.dubbo.registry=zookeeper://localhost:2181
控制层方法。@Reference注解表示在这其中引用远程接口服务。
package com.szh.springboot.controller; import com.alibaba.dubbo.config.annotation.Reference; import com.szh.springboot.service.StudentService; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; /** * */ @Controller public class StudentController { @Reference(interfaceClass = StudentService.class,version = "1.0.0",check = false) private StudentService studentService; @RequestMapping(value = "/student/count") public @ResponseBody Object studentCount() { Integer allStudentCount=studentService.queryAllStudentCount(); return "学生总人数为:" + allStudentCount; } }
pom文件和服务提供者是一样的,这里不再给出代码了。最后是SpringBoot项目启动入口类。
package com.szh.springboot; import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication //开启Spring注解配置 @EnableDubboConfiguration //开启Dubbo注解配置 public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
2.4 启动测试!!!
因为我们这个案例是SpringBoot集成Dubbo,同时使用注册中心。所以启动的步骤是:
1. 启动zookeeper注册中心 zkServer.cmd(我这里为了考虑电脑性能,所以直接就在Windows上启动了,推荐是在Linux上启动)
2. 启动服务提供者(对应该工程的SpringBoot项目启动入口类)
3. 启动服务消费者(对应该工程的SpringBoot项目启动入口类)