Dubbo是实现远程调用的一个框架,阿里巴巴开源的。远程调用就是B服务器可以调用A服务器的方法。大型项目会被拆分成多个模块,部署在不同的服务器上。若将公共模块集中部署在一台服务器上,可以方便其他服务器调用。因此,需要Dubbo。
此外参考Dubbo官方手册,Dubbo自己提供注册中心,需要在provider项目中配置文件里配置dubbo协议才能使用,目前主流的办法是使用zookeeper注册中心。
本案例提供三个模块演示springboot项目如何集成Dubbo
 015_interface_api 公用模块
项目类型:maven java工程
描述:存放实体bean和业务接口
负责业务模块:Model,Service
016_springboot_provider :服务提供者
项目类型:SpringBoot web工程
描述:实现业务接口中的接口
负责业务模块:ServiceImpl,Mapper
017_consumer:服务消费者
项目类型:SpringBoot web工程
描述:处理从浏览器客户端发送的请求,就是 Controller 层
负责业务模块:Controller
目录
- 015_interface_api
 - 016_springboot_provider
 - 1 导入额外的依赖
 - 2 实现stuServiceimpl
 - 3 配置application.properties文件
 - 4 @EnableDubbo注解 启动服务
 
- 017_consumer
 - 1 导入额外依赖
 - 2 实现controller类 并启动
 - 3 配置application.properties文件
 
- 启动项目步骤
 
015_interface_api

 stu类
/**
 * Dubbo 实体 Bean 需实现 Serializable ,否则会报错
 */
public class stu implements Serializable {
    private String name;
    private Integer age;
    private String sex;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    @Override
    public String toString() {
        return "stu{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }
}
 
stuService
public interface stuService {
    stu queryStudent(Integer id);
}
 
016_springboot_provider
1 导入额外的依赖

 <!-- 1、导入项目015的依赖-->
        <dependency>
            <groupId>com.zjh</groupId>
            <artifactId>015_interface_api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!-- 2、导入Dubbo依赖-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.8</version>
        </dependency>
        <!-- 3、导入Zookeeper依赖-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper</artifactId>
            <version>2.7.8</version>
            <type>pom</type>
            <!-- 禁用zookeeper的日志,因为Dubbo自己也携带了一个,多个日志重复-->
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
 
2 实现stuServiceimpl
//写此注解是为了确保注入到容器
@Service
//@DubboService说明:使用dubbo的注解暴露服务,版本号自定义
@DubboService(interfaceClass = stuService.class, version = "1.0" )
public class stuServiceImpl implements stuService {
    @Override
    public stu queryStudent(Integer id) {
        stu student = new stu();
        if( 1001 == id){
            student.setName("zjh");
            student.setAge(10);
            student.setSex("男");
        }
        return student;
    }
}
 
3 配置application.properties文件
# 配置服务名称 dubbo:application name="名称"
spring.application.name=stuservice-provider
# 配置扫描的包,扫描的@DubboService
dubbo.scan.base-packages=com.zjh.service
# 配置注册中心
dubbo.registry.address=zookeeper://localhost:2181
 
4 @EnableDubbo注解 启动服务
@SpringBootApplication
//启动Dubbo
@EnableDubbo
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
}
 
017_consumer

1 导入额外依赖
在provider依赖的基础上再加一个web依赖
<!-- 4、web依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
 
2 实现controller类 并启动
@RestController
//消费者也启动Dubbo
@EnableDubbo
public class DubboController {
    //原本需要@ resource自动注入
    @DubboReference(interfaceClass = stuService.class, version = "1.0")
    private stuService stuservice;
    @RequestMapping("/dubbo/{stu_id}")
    public String HelloSubbo(@PathVariable("stu_id")Integer id){
        stu stu = stuservice.queryStudent(id);
        return "远程调用接口,获取对象:"+stu.toString();
    }
}
 
3 配置application.properties文件
# dubbo服务命名 dubbo:application name="名称"
spring.application.name=stuservice-consumer
# 注册中心
dubbo.registry.address=zookeeper://localhost:2181
 
启动项目步骤
- 启动安装的zookeeper服务
 - 依次启动provider服务,consumer服务
 - 输入localhost:8080/dubbo/id=1001
 


















