Sprinboot集成dubbo+zookeeper完成注册中心以及生产者和消费者之间的调用关系

一.介绍

1.1 dubbo是阿里巴巴soa服务化治理方案的核心框架,是一个分布式服务的框架,致力于提高性能和透明化rpc远程服务调用方案,对于soa服务治理方案。看到这里会有点懵,什么是soa呢,什么是rpc呢???

soa:面向服务的架构,将应用程序的不同功能单元(也叫作服务)通过服务之间的定义良好的接口和契约联系起来。

rpc:远程过程调用协议,是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

1.2 在dubbo+zookeeper中有三个重要的角色:

   1). provider(服务提供者):在我们项目中可以粗糙地理解成实现类

   2).Consumer(服务消费者):可以理解为调用服务(调用实现类)的类,类似于controller,当然如果集成rabbitmq也有可能是消息队列的类,也有可能是实现类调用实现类,所以实现类可以身兼数职,既可以是服务提供者也可以是服务调用者。

   3).registry(zookeeper):也就是我们的注册中心,zookeeper是Apache下的产品。没有用dubbo之前我们一般是controller调用service,service调用mapper(dao),但是现在加上了dubbo以后就是controller(当然不止controller,所有服务消费者都可以)通过向zookeeper订阅服务,service向zookeeper注册服务,通过zookeeper这个中介,把服务提供方的服务注入到服务消费者中。
Sprinboot集成dubbo+zookeeper完成注册中心以及生产者和消费者之间的调用关系_第1张图片

二.实践demo

2.1 首先创建一个maven父级项目,然后在父级项目下创建三个子项目模块.如下图所示:
Sprinboot集成dubbo+zookeeper完成注册中心以及生产者和消费者之间的调用关系_第2张图片
解释:
boot-dubbo-api是service接口和实体类对象
boot-dubbo-consumer是消费者,就是controller接口
boot-dubbo-provider是生产者,就是service接口的实现类

2.2 boot-dubbo-api内部依赖以及demo

1).依赖

	


    4.0.0
    com.ligh
    boot-dubbo-api
    1.0
    
    pom
    
        UTF-8
        UTF-8
        1.8
    

2). 实体类

/**
 * Created by ${ligh} on 2019/1/29 下午7:26
 */
public class User implements Serializable{

    private static final long serialVersionUID = 1L;  
    private String username;
    private String password;
    private String city;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
}

3). service接口

import com.ligh.domain.User;

/**
 * Created by ${ligh} on 2019/1/29 下午7:27
 */
public interface UserService {

    //测试方法
    public User getUser();
}

2.3 boot-dubbo-provider内部依赖以及demo

1).依赖



    
        boot-dubbo
        com.ligh
        1.0-SNAPSHOT
    
    4.0.0
    boot-dubbo-provider
    
        UTF-8
        UTF-8
        1.8
    
    
        
            com.ligh
            boot-dubbo-api
            1.0
        
        
            io.dubbo.springboot
            spring-boot-starter-dubbo
            1.0.0
        
        
            org.springframework.boot
            spring-boot-starter-web
            2.0.4.RELEASE
        
        
            org.springframework.boot
            spring-boot-starter-test
            2.0.4.RELEASE
            test
        
        
            junit
            junit
            4.7
        
    
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

2).配置文件application.properties

server.port=8081
## Dubbo 服务提供者配置
spring.dubbo.application.name=provider
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=2088
spring.dubbo.scan=com.ligh.serviceImpl

3).service实现类

import com.alibaba.dubbo.config.annotation.Service;
import com.ligh.domain.User;
import com.ligh.service.UserService;
import javax.annotation.PostConstruct;
/**
 * Created by ${ligh} on 2019/1/29 下午7:31
 */
@Service
public class UserServiceImpl implements UserService{

    //项目启动就会加载
    @PostConstruct
    void init(){
        System.out.println("user 测试");
    }
    @Override
    public User getUser() {
        User user = new User();
        user.setUsername("李国辉");
        user.setPassword("12345678");
        user.setCity("杭州");
        return user;
    }
}

2.4 boot-dubbo-consumer内部依赖以及demo

1).依赖



    
        boot-dubbo
        com.ligh
        1.0-SNAPSHOT
    
    4.0.0
    boot-dubbo-consumer
    
        UTF-8
        UTF-8
        1.8
    
    
        
            com.ligh
            boot-dubbo-api
            1.0
        
        
            io.dubbo.springboot
            spring-boot-starter-dubbo
            1.0.0
            
                
                    org.springframework
                    spring
                
            
        
        
            org.springframework.boot
            spring-boot-starter-web
            2.0.4.RELEASE
            
                
                    org.springframework
                    spring
                
            
        
        
            org.springframework.boot
            spring-boot-starter-test
            2.0.4.RELEASE
            
                
                    org.springframework
                    spring
                
            
            test
        
        
            junit
            junit
            4.7
            
                
                    org.springframework
                    spring
                
            
        
    
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

2).配置文件application.properties

## 避免和 server 工程端口冲突
server.port=8082
## Dubbo 服务消费者配置
spring.dubbo.application.name=consumer
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.scan=com.ligh.controller

3).controller接口

import com.alibaba.dubbo.config.annotation.Reference;
import com.ligh.domain.User;
import com.ligh.service.AddService;
import com.ligh.service.UserService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.PostConstruct;
/**
 * Created by ${ligh} on 2019/1/30 上午8:12
 */
@RestController
public class UserController {

    @Reference  
    UserService userService;
    @Reference
    AddService addService;
    
    @RequestMapping("hello")
    public String hello(){
        addService.sayhello();
        return "success";
    }
    @RequestMapping(value = "getUser")
    public User getUser(){
        User user = userService.getUser();
        return user;
    }
}

2.5 启动顺序
   首先启动生产者(boot-dubbo-provider)–>然后就是消费者(boot-dubbo-consumer),如果启动都没有报错,就成功了一大半。

三. 搭建dubbo-admin环境,通过界面查看生产者和消费者之间是否产生调用关系

   3.1 搭建环境之前首先要搭建zookeeper环境,如果不会的朋友可以点击下面链接zookeeper安装启动教程

   3.2 下载dubbo-admin源码包,源码包下载地址,修改/dubbo-admin/src/main/webapp/WEB-INF/dubbo.properties的配置文件,如果是本地无需配置

dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=root

   3.3 配置完成之后在dubbo-admin的目录下直接执行打包编译命令

mvn clean install -Dmaven.test.skip=true

   3.4 然后进入到target目录下找到dubbo-admin-2.8.4.war,把改war包放在tomcat的webapps目录下,然后启动tomcat,在浏览器中输入地址http://localhost:8080/dubbo-admin-2.8.4提示输入用户名和密码都是root,然后输入进入以下界面表示成功
Sprinboot集成dubbo+zookeeper完成注册中心以及生产者和消费者之间的调用关系_第3张图片
   3.5 输入本机ip地址localhost可以进行查看接口是否已经注册到注册中心
Sprinboot集成dubbo+zookeeper完成注册中心以及生产者和消费者之间的调用关系_第4张图片
两个在boot-dubbo-api中的service接口已经注册到注册中心中,可以供消费者消费了。

   3.6 在浏览器中输入消费者项目中的controller,查看dubbo-admin是否有消费记录
Sprinboot集成dubbo+zookeeper完成注册中心以及生产者和消费者之间的调用关系_第5张图片
然后查看dubbo-admin是否有消费记录

Sprinboot集成dubbo+zookeeper完成注册中心以及生产者和消费者之间的调用关系_第6张图片

从图中可以清楚的看到已经通知消费记录了。

以上就完成了基于Springboot搭建zookeeper做注册中心,dubbo做生产者和消费者,并且通过dubbo-admin进行界面的管理。

你可能感兴趣的:(spring,boot,服务器架构,发展走向)