- 先看看整体的项目目录:
SpringBoot集成Dubbo的思想有点类似于三层架构的思想,在图片中SpringBootProject属于服务的生产者,而-consumer这属于消费者,-interface就是连接生产者和消费者的一个通道。这样做的好处就是可以调用远程的服务接口来实现自身的业务功能
SpringBoot-interface项目
主要是用来定义接口用来给生产者和消费者打jar包
SpringBootProject项目
主要是用来实现接口中的业务逻辑,在该项目中需要引入Dubbo以及zookeeper的起步依赖
<!--导入Dubbo的起步依赖-->
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<!--导入zookeeper依赖-->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
<!--导入之前的接口模块-->
<dependency>
<groupId>org.example</groupId>
<artifactId>SpringBoot-interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
- 接口实现类:
import com.alibaba.dubbo.config.annotation.Service;
import com.example.tom.service.UserService;
import org.springframework.stereotype.Component;
@Component
@Service(interfaceClass = UserService.class,timeout = 15000)
public class UserServiceImpl implements UserService {
@Override
public String sayHi(String name) {
return "hello "+name;
}
}
注意:这里的@Service注解引入的是com.alibaba.dubbo.config.annotation.Service的包
- 需要在该项目的main函数中使用@EnableDubboConfiguration开启Dubbo的自动配置文件
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**@EnableDubboConfiguration开启Dubbo的自动配置文件
* */
@EnableDubboConfiguration
@SpringBootApplication
public class TomApplication {
public static void main(String[] args) {
SpringApplication.run(TomApplication.class, args);
}
}
- 该项目的核心配置文件:
#配置内嵌Tomcat的端口号
server.port=80
#配置项目访问的跟路径
server.servlet.context-path=/SpringBootProject
#配置Dubbo,需要有,不能少
spring.application.name=SpringBootProject
#表示提供者,可以省略
spring.dubbo.server=true
#注册中心
spring.dubbo.registry=zookeeper://127.0.0.1:2181
SpringBoot-consumer项目
主要用于调用远程的Service服务以及与前端的数据交互,相当于Controller层
- 在pom.xml文件中
<!--导入Dubbo的起步依赖-->
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<!--导入zookeeper依赖-->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
<dependency>
<groupId>org.example</groupId>
<artifactId>SpringBoot-interface</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
- 该项目的核心配置文件:
#配置内嵌Tomcat的端口号
server.port=9090
#配置Dubbo,需要有,不能少
spring.application.name=SpringBoot-consumer
spring.dubbo.appname=SpringBoot-consumer
#注册中心
spring.dubbo.registry=zookeeper://127.0.0.1:2181
- 在Controller层调用远程的服务接口:
import com.alibaba.dubbo.config.annotation.Reference;
import com.example.tom.service.UserService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
/**引用远程的Dubbo登录
* */
@Reference
private UserService userService;
@GetMapping("/boot/hi")
public String hi(){
return userService.sayHi("Spring Boot");
}
}
注意:@Reference注解导入的是com.alibaba.dubbo.config.annotation.Reference的包
- 在main函数中使用注解开启Dubbo配置文件:
/**开启Dubbo配置文件
* */
@EnableDubboConfiguration
@SpringBootApplication
public class TomApplication {
public static void main(String[] args) {
SpringApplication.run(TomApplication.class, args);
}
}