SpringBootDubbo构建分布式服务的方法

概述:

创新互联公司专注于乌海海南企业网站建设,响应式网站,商城建设。乌海海南网站建设公司,为乌海海南等地区提供建站服务。全流程按需求定制设计,专业设计,全程项目跟踪,创新互联公司专业和态度为您提供的服务

 Spring Boot Dubbo 构建分布式服务的方法

节点角色说明

节点角色说明
Provider暴露服务的服务提供方
Consumer调用远程服务的服务消费方
Registry服务注册与发现的注册中心
Monitor统计服务的调用次数和调用时间的监控中心
Container服务运行的容器

调用关系说明

  • 服务容器 Container 负责启动,加载,运行服务提供者。
  • 服务提供者 Provider 启动的时候,向注册中心 Registry 注册自己提供的服务。
  • 服务消费者 Consumer 在启动的时候,向注册中心 Registry 订阅自己所需要的服务。注册中心 Registry 返回服务提供者的地址列表给消费者,如果有变更注册中心将基于长连接推送变更数据给消费者。
  • 服务消费者从提供者地址列表中,基于软负载均衡算法,选择一台提供者进行进行调用,如果调用失败再选择另外一台。
  • 服务消费者与提供者在内存中统计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心 Monitor 。

 项目构建

开发环境主要涉及以下方面:

  • Spring Boot
  • JDK 8
  • Dubbo 2.7.1
  • Zookeeper

具体代码可以查看 github 的 dubbo 模块: https://github.com/UniqueDong/springboot-study

Dubbo API

定义服务接口,打成 jar 包让消费者依赖,服务者实现接口。该工程只有接口定义以及 model 对象。@Data 属于lombok 开源库提供的特性,方便开发。

model 对象定义:

@Data
public class User implements Serializable {
  private Long id;
  private String username;
}

provider 接口定义:

public interface UserProvider {
  List listUser();
}

Provider 服务提供者

pom依赖:

引入spring-boot-starter,dubbo-api 接口就是我们上面提到的 接口定义 jar ,dubbo-spring-boot-starter ,dubbo-dependencies-zookeeper。


    
      org.springframework.boot
      spring-boot-starter
      
        
          spring-boot-starter-logging
          org.springframework.boot
        
      
    
    
      zero.springboot.study
      dubbo-api
      1.0.0-SNAPSHOT
    
    
    
      org.apache.dubbo
      dubbo-spring-boot-starter
      2.7.1
    

    
      org.apache.dubbo
      dubbo
      2.7.1
    

    
    
      org.apache.dubbo
      dubbo-dependencies-zookeeper
      2.7.1
      pom
      
        
          log4j
          log4j
        
        
          slf4j-log4j12
          org.slf4j
        
      
    

    
    
    
      com.alibaba
      fastjson
      1.2.57
    
  

配置文件 yaml 定义:

spring:
 application:
  name: dubbo-provider
#自定义配置
embedded:
 zookeeper:
  # zookeeper 服务连接端口
  port: 2181

# dubbo 配置
dubbo:
 # 注册中心配置 
 registry:
  id: dubbo-provider
  address: zookeeper://127.0.0.1:${embedded.zookeeper.port}
  group: local
 application:
  name: dubbo-provider
  id: dubbo-provider
  logger: slf4j
  qosEnable: true
  qosPort: 22224
  qosAcceptForeignIp: false
 # dubbo 协议配置
 protocol:
  # -1 表示使用随机未被占用的端口
  port: -1
  name: dubbo
 scan:
  # dubbo 服务提供者实现类所在包
  base-packages: com.zero.provider.impl

实现 api 定义的接口

注意 @Service 是 Dubbo 的,不要导入了 Spring 的。

import com.google.common.collect.Lists;
import com.zero.api.model.User;
import com.zero.api.provider.UserProvider;
import org.apache.dubbo.config.annotation.Service;

import java.util.List;

@Service(interfaceClass = UserProvider.class)
public class UserProviderImpl implements UserProvider {
  @Override
  public List listUser() {
    User user = new User();
    user.setId(1L);
    user.setUsername("青龙");
    return Lists.newArrayList(user);
  }
}

Consumer

Pom 定义:

我们要依赖 spring-boot-starter-web 提供http rest接口给前端调用。同时内部通过 Dubbo 实现 RPC调用服务提供者。


    
      org.springframework.boot
      spring-boot-starter-web
      
        
          org.springframework.boot
          spring-boot-starter-logging
        
      
    
    
      zero.springboot.study
      dubbo-api
      1.0.0-SNAPSHOT
    
    
    
      org.apache.dubbo
      dubbo-spring-boot-starter
      2.7.1
    

    
      org.apache.dubbo
      dubbo
      2.7.1
    

    
    
      org.apache.dubbo
      dubbo-dependencies-zookeeper
      2.7.1
      pom
      
        
          log4j
          log4j
        
        
          slf4j-log4j12
          org.slf4j
        
      
    

    

    
      org.projectlombok
      lombok
      true
    

  

yaml 定义:

server:
 # web 日更年期端口
 port: 9005
spring:
 application:
  name: dubbo-comsumer
#自定义配置
embedded:
 zookeeper:
  port: 2181
# dubbo 配置
dubbo:
 registry:
  id: dubbo-comsumer
  address: zookeeper://127.0.0.1:${embedded.zookeeper.port}
  group: local
 application:
  name: dubbo-comsumer
  id: dubbo-comsumer
  logger: slf4j
  qosEnable: false
  qosPort: 22223
  qosAcceptForeignIp: false
 protocol:
  port: -1
  name: dubbo
 # 是否检查服务提供者有效 
 consumer:
  check: false

服务消费者调用服务生产者

import com.zero.api.model.User;
import com.zero.api.provider.UserProvider;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {

  @Reference
  private UserProvider userProvider;

  public List listUser() {
    return userProvider.listUser();
  }
}

我们通过一个RESTfull接口,提供给前端调用。

@RestController
@RequestMapping("/users")
public class UserController {
  @Autowired
  private UserService userService;

  @GetMapping
  public Object listUser() {
    List list = userService.listUser();
    return list;
  }
}

总结

各种具体协议、注册中心、多注册中心、超时等配置可以查看官方文档 http://dubbo.apache.org/zh-cn/docs/user/quick-start.html

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持创新互联。


当前文章:SpringBootDubbo构建分布式服务的方法
本文地址:http://pwwzsj.com/article/psjjeo.html