SpringBoot集成Dubbo

SpringBoot集成Dubbo

集成Duboo一般需要:

开发Dubbo服务接口========Interface
开发Dubbo服务提供者======ServiceImpl
开发Dubbo服务消费者======Controller

1.开发Dubbo服务接口

新建Maven项目,需要在项目中建实体类,以及服务接口

SpringBoot集成Dubbo_第1张图片

public class Student implements Serializable {
    private Integer id;

    private String name;

    private Integer age;
    //省略set/get
}

服务接口

public interface StudentService {
    String sayHi(String name);
    Student getStudent(int id);
}

在Maven projects下打开项目===》Lifecycle===》install
SpringBoot集成Dubbo_第2张图片
可以在本地仓库生成项目的依赖jar包
SpringBoot集成Dubbo_第3张图片

2.开发Dubbo服务提供者

新建Springboot项目,选择新建Mudule,这次我们可以通过Spring Initializr新建项目,引入项目需要的依赖

SpringBoot集成Dubbo_第4张图片

  
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
        
            com.alibaba.spring.boot
            dubbo-spring-boot-starter
            2.0.0
        
        
        
            com.101tec
            zkclient
            0.10
        
        
        
            com.jiuyue
            springboot-dubbo-interface
            1.0-SNAPSHOT
        
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            1.3.1
        
        
        
            mysql
            mysql-connector-java
        
    

SpringBoot与Dubbo集成要引入Dubbo起步依赖,由于使用了zookeeper作为注册中心,则需要加入zookeeper客户端依赖。此外,我们需要访问mysql数据库,所以,还需要Mybatis起步依赖,以及Mysql的连接驱动包,因为我们在服务提供者中要继承实现服务接口,则需要引入服务接口之前生成在仓库中的依赖。

在application.properties配置文件中配置,tomcat的内嵌服务端口,Dubbo,mybatis,dataSource的相关配置信息。

# tomcat的内嵌服务端口
server.port=8080

# Dubbo配置
spring.dubbo.application.name=springboot-dubbo-provider
spring.dubbo.registry=zookeeper://127.0.0.1:2181


# mybatis
mybatis.mapper-locations=classpath:com/jiuyue/dubboprovider/mapper/*.xml
#mybatis.type-aliases-package=classpath:com.jiuyue.model

# dataSource
spring.datasource.url=jdbc:mysql://localhost:3306/springdb?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=1111
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

注意:需要在pomx.xml配置Mapper.xml的资源路径信息,否则运行后找不到Mapper.xml文件。

  
        
            
                src/main/java
                
                    **/*.xml
                
            
        
    

服务提供者类,需要继承实现服务接口,并重写接口中的方法。

@Component
@Service(version = "1.0-SNAPSHOT",timeout = 10000) //Dubbo注解
public class UserServiceImpl implements StudentService{
    @Autowired
    private StudentMapper studentMapper;

    @Override
    public String sayHi(String name) {
        return "Hi Springboot:"+name;
    }

    @Override
    public Student getStudent(int id) {
        //查询数据库
        return studentMapper.selectByPrimaryKey(id);
    }
}

需要知道:
@Component
@Service(version = "1.0-SNAPSHOT",timeout = 10000) //Dubbo注解

@Component==@Service
@Service是com.alibaba.dubbo.config.annotation.Service中的Dubbo注解,在里面需要指明version = "1.0-SNAPSHOT"(这个是服务接口的jar版本)。

3.开发Dubbo服务消费者

Dubbo服务消费者还是一个Springboot的Web项目,选择新建Mudule,通过Spring Initializr新建项目,引入项目需要的依赖。

SpringBoot集成Dubbo_第5张图片

    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            com.jiuyue
            springboot-dubbo-interface
            1.0-SNAPSHOT
        
        
        
            com.alibaba.spring.boot
            dubbo-spring-boot-starter
            2.0.0
        
        
        
            com.101tec
            zkclient
            0.10
        
    

application.properties配置文件配置Dubbo的相关信息,以及内嵌Tomcat的端口

#  tomcat的内嵌服务端口
server.port=9090

# Dubbo配置
spring.dubbo.application.name=springboot-dubbo-dubboconsumer
spring.dubbo.registry=zookeeper://127.0.0.1:2181

消费者Controller类

@RestController
public class StudentController {

    @Reference(version = "1.0-SNAPSHOT")
    private StudentService studentService;

    @RequestMapping("boot/student/{id}")
    public Object getStudent(@PathVariable("id") int id){
        return  studentService.getStudent(id);
    }

    @RequestMapping("test")
    public void getStudent(){
        System.out.println("test Success");
    }
    @RequestMapping("sayHi/{name}")
    public String sayHi(@PathVariable("name") String name){
       return studentService.sayHi(name);
    }
}

测试之前,首先需要下载安装ZooKeeper,我下载的是windows的-zookeeper-3.4.12版本。

ZooKeeper简介:

  • ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

  • ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

  • ZooKeeper包含一个简单的原语集,提供Java和C的接口。

下载安装教程可以参考:https://www.cnblogs.com/grimm/p/6732867.html

测试开始:

1.启动ZooKeeper:进入到bin目录,然后输入zkServer.cmd启动。
2.运行服务提供者项目(运行在内嵌Tomcat8080端口)
3.运行服务消费者项目(运行在内嵌Tomcat9090端口)
在浏览器地址栏输入http://localhost:9090/sayHi/jiuyue
Hi Springboot:jiuyue


在浏览器地址栏输入http://localhost:9090/boot/student/1

{"id":1,"name":"jiuyue-update","age":20}

你可能感兴趣的:(SpringBoot)