dubbo的初使用

dubbo的初使用

Scroll Down

dubbo的初使用

dubbo简介

dubbo官网

一、背景

随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。

image

单一应用架构

当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。

垂直应用架构

当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,提升效率的方法之一是将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。

分布式服务架构

当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。

流动计算架构

当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。

二、dubbo架构图

asdsa

节点角色说明
节点角色说明
Provider暴露服务的服务提供方
Consumer调用远程服务的服务消费方
Registry服务注册与发现的注册中心
Monitor统计服务的调用次数和调用时间的监控中心
Container服务运行容器
调用关系说明
  1. 服务容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

介绍结束,下面开始初步使用

准备一个小项目

A服务

Service接口

public interface UserService {

    /**
     *查询所有
     * @return
     */
    List<UserInfo> findAll();


    /**
     * 根据用户id查询用户地址列表
     * @param userId
     * @return
     */
    List<UserAddress> getUserAddressList(String userId);
}

实现类

@Service
public class UserServiceImpl implements UserService {


    @Autowired
    private UserInfoMapper userInfoMapper;

    @Autowired
    private UserAdderssMapoper userAdderssMapoper;

    @Override
    public List<UserInfo> findAll() {


        return userInfoMapper.selectAll();
    }

    @Override
    public List<UserAddress> getUserAddressList(String userId) {

        UserAddress userAddress = new UserAddress();

        userAddress.setId(userId);

        return userAdderssMapoper.select(userAddress);
    }
}

端口号

server.port=8001

# mysql数据库连接
spring.datasource.url=jdbc:mysql://192.168.113.132:3306/gmall?characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456

B服务

@Controller
public class OrderController {


//    @Autowired

    @Autowired
    private UserService userService;


//    @RequestMapping("trade")
//    public String trade() {
//        return "index";
//    }


    @RequestMapping("trade")
    @ResponseBody
    public List<UserAddress> trade(String userId) {
        return userService.getUserAddressList(userId);
    }

}

端口号

server.port=8081

spring.thymeleaf.cache=false
spring.thymeleaf.mode=LEGACYHTML5

使用场景

B服务想要调用A服务中的UserService来查找用户的地址。

初使用

一、一台空的虚拟机,操作系统为CentOS7

二、安装jdk

先卸载jdk原始版本

  • rpm -qa | grep jdk

jdk

解压jdk

tar -zxvf jdk-8u152-linux-x64.tar.gz

# vim /etc/profile

在最后添加如下配置

sda

source /etc/profile

使配置文件生效。永久生效则必须要reboot!

# java -version

三、安装zookeeper

官方推荐使用zookeeper注册中心

sdadasd

zookeeper版本 zookeeper-3.4.11.tar.gz

拷贝zookeeper-3.4.11.tar.gz到/opt下,并解压缩

asdasdas

改名叫zookeeper

mv zookeeper-3.4.11.tar.gz zookeeper

拷贝/opt/zookeeper/conf/zoo_sample.cfg

到同一个目录下改个名字叫zoo.cfg

asdasdas

然后咱们启动zookeeper

进入bin目录执行文件

 ./zkServer.sh start
 ./zkServer.sh status

asdsada

如上则安装成功

默认的端口号是2181!

四、安装tomcat

  • 解压apache-tomcat-8.5.24.tar(1).gz
tar -zxvf apache-tomcat-8.5.24.tar(1).gz
  • 重命名apache-tomcat-8.5.24.tar(1).gz
mv apache-tomcat-8.5.24.tar(1).gz tomcat8
  • 运行测试,进入tomcat8下bin目录
./startup.sh

2020-07-15_204120

tomcat启动成功

五、安装 dubbo 监控中心

  • 将dubbo-admin-2.6.0.war放入tomcat8的webapps文件夹下

  • 此时如果你的tomcat处于启动状态则会自动多出来一个文件夹dubbo-admin-2.6.0

    2020-07-15_204317

  • 将tomcat关掉

./shutdown.sh

在关闭的时候,一定要注意不能报错!

如果报错,重新安装tomcat。

  • 将tomcat 中webapps 中的dubbo-admin-2.6.0.war 删掉!
rm -rf dubbo-admin-2.6.0.war
  • 修改名称
mv dubbo-admin-2.6.0 dubbo-admin
  • 重启tomcat
 ./startup.sh

http://192.168.67.219:8080/dubbo-admin/governance/providers

此时并没有服务提供者

六、在测试项目中配置dubbo

  1. 加入依赖

    • 以来的版本

      		<dubbo-starter.version>1.0.10</dubbo-starter.version>
              <dubbo.version>2.6.0</dubbo.version>
              <zkclient.version>0.10</zkclient.version>
      
      
    • <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>dubbo</artifactId>
      </dependency>
      
      <dependency>
          <groupId>com.101tec</groupId>
          <artifactId>zkclient</artifactId>
          <exclusions>
              <exclusion>
                  <groupId>org.slf4j</groupId>
                  <artifactId>slf4j-log4j12</artifactId>
              </exclusion>
          </exclusions>
      </dependency>
      
      <dependency>
          <groupId>com.gitee.reger</groupId>
          <artifactId>spring-boot-starter-dubbo</artifactId>
      </dependency>
      
      
      
    1. 配置服务提供者

      • 改变UserServiceImpl的@Service注解

        ==一定要注意==

        2020-07-15_205921

      • 在application.properties中添加

        #dubbo配置注册中心
        #服务提供者名称
        spring.dubbo.application.name=usermanage
        spring.dubbo.registry.protocol=zookeeper
        #zookeeper端口号
        spring.dubbo.registry.address=192.168.113.132:2181
        #扫描包
        spring.dubbo.base-package=com.atguan.gmall
        #协议名称
        spring.dubbo.protocol.name=dubbo
        
    2. 配置服务消费者

      • 添加注解 Reference注解引用服务

        //    @Autowired
        
            @Reference
            private UserService userService;
        
        
        //    @RequestMapping("trade")
        //    public String trade() {
        //        return "index";
        //    }
        
        
            @RequestMapping("trade")
            @ResponseBody
            public List<UserAddress> trade(String userId) {
                return userService.getUserAddressList(userId);
            }
        
      • 在application.properties中添加

        #注册中心的地址配置
        #服务消费者名称
        spring.dubbo.application.name=order-web
        spring.dubbo.registry.protocol=zookeeper
        spring.dubbo.registry.address=192.168.113.132:2181
        spring.dubbo.base-package=com.atguan.gmall
        spring.dubbo.protocol.name=dubbo
        spring.dubbo.consumer.timeout=10000
        spring.dubbo.consumer.check=false
        

七、重启两个服务

此时查看监控中心

http://192.168.67.219:8080/dubbo-admin/governance/providers

2020-07-15_210804

2020-07-15_210820

服务提供者和消费者成功注册

至此,消费者可以成功调用提供者中的UserService