zoukankan      html  css  js  c++  java
  • springboot整合dubbo

    SpringBoot整合Dubbo

    一、Dubbo

         Dubbo是一款高性能、轻量级的开源Java RPC框架,

      它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。  

      关键点介绍:

      1.注册与发现  

        Dubbo使用zookeeper做服务的注册中心,就是服务的提供者以临时节点的形式将服务Server信息注册保存到Zookeeper的dubbo目录下的provider的节点下,供消费者发现调用。

      2.负载均衡

        Dubbo支持负载均衡策略,就是同一个Dubbo服务被多台服务器启用后,会在在Zookeeper提供者节点下显示多个相同接口名称节点。

        消费者在调用Dubbo负载均衡服务时,采用权重的算法策略选择具体某个服务器上的服务,权重策略以*2倍数设置。

      3.容错机制

        Dubbo的提供者在Zookeeper上使用的是临时节点,一旦提供者所在服务挂掉,该节点的客服端连接将会关闭,故节点自动消失。所以消费者调用接口时将不会轮询到已经挂掉的接口上(延迟例外)。

      4.Dubbo协议

        Dubbo常用协议有两种:dubo、hessian

        dubbo:

          Dubbo 缺省协议是dubbo协议,采用单一长连接和 NIO 异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。

        hessian:

          Hessian底层采用Http通讯(同步),采用Servlet暴露服务。适用于传入传出参数数据包较大,消费者并发量少,提供者较多,可传文件。

      5.Dubbo容器

        Dubbo在java jvm中有自己的容器,和Spring IOC的bean一样,将服务对象保存到自己的容器中。

      6.监控中心

        监控中心主要是用来服务监控和服务治理。

        服务治理包含:负载均衡策略、服务状态、容错、路由规则限定、服务降级等。具体可以下载Dubbo监控中心客户端查看与设置。

    二、Zookeeper

       集群安装教程:https://www.cnblogs.com/zwcry/p/10272506.html

    三、SpringBoot整合Dubbo

      整合前要明白Dubbo RPC远程过程调用服务的格调,是采用API接口形式调用。

      故分为:服务接口Project、提供者Project、消费者Project 三大块。服务接口Project用来定义接口API,提供者Project用来实现API接口并对外暴露接口,消费者使用服务接口API调用提供者对外暴露的服务。

      1.pom.xml依赖

            <!-- dubbo依赖 -->
            <!-- https://mvnrepository.com/artifact/com.alibaba.spring.boot/dubbo-spring-boot-starter -->
            <dependency>
                <groupId>com.alibaba.spring.boot</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>2.0.0</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/com.101tec/zkclient -->
            <dependency>
                <groupId>com.101tec</groupId>
                <artifactId>zkclient</artifactId>
                <version>0.10</version>
            </dependency>

      2.定义服务接口Project的接口类

    package com.qy.dubbo.server.api;
    
    public interface DubboUserServer {
        
        /**
         * @author 七脉
         * 描述:获取用户
         * @param id
         * @return
         */
        String getUser(Long id);
        
    }

      3.提供者Project

        (1)服务实现暴露类

    package com.qy.dubbo.server.service;
    
    import org.springframework.stereotype.Component;
    
    import com.alibaba.dubbo.config.annotation.Service;
    import com.qy.dubbo.server.api.DubboUserServer;
    
    @Service(interfaceClass=DubboUserServer.class)
    @Component
    public class DubboUserServerImpl implements DubboUserServer {
    
        @Override
        public String getUser(Long id) {
            String name = "";
            if(1==id){
                name = "董志峰";
            }else if(2==id){
                name = "刘亦菲";
            }else{
                name = "杨幂";
            }
            return name+"8082";
        }
    
    }

        (2)启动类 

    package com.qy.dubbo;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
    
    @EnableDubboConfiguration
    @SpringBootApplication
    public class DubboServerApplication {
        
        public static void main(String[] args) {
            System.setProperty("dubbo.application.logger", "slf4j");
            SpringApplication.run(DubboServerApplication.class, args);
        }
        
    }

        (3)application.properties

    server.port=8081
      
    ## dubbo springboot 配置
    spring.dubbo.application.id=dubbo-server-provider
    spring.dubbo.application.name=dubbo-server-provider
    spring.dubbo.registry.protocol=zookeeper
    spring.dubbo.registry.address=192.168.159.129:2181,192.168.159.129:2182,192.168.159.129:2183
    spring.dubbo.server=true
    spring.dubbo.protocol.name=dubbo
    spring.dubbo.protocol.port=2${server.port}

      4.消费者

        (1)服务客户端

    package com.qy.dubbo.client;
    
    import org.springframework.stereotype.Component;
    
    import com.alibaba.dubbo.config.annotation.Reference;
    import com.qy.dubbo.server.api.DubboUserServer;
    
    @Component
    public class DubboUserCient {
        
        @Reference(check=false)
        private DubboUserServer dubboUserServer;
        
        public String getUser(Long id){
            return dubboUserServer.getUser(id);
        }
    }

        (2)启动类

    package com.qy.dubbo;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
    import com.qy.dubbo.client.DubboUserCient;
    
    @RestController
    @EnableDubboConfiguration
    @SpringBootApplication
    public class DubboClientApplication {
        
        @Autowired
        private DubboUserCient dubboUserCient;
        
        public static void main(String[] args) {
            System.setProperty("dubbo.application.logger", "slf4j");
            SpringApplication.run(DubboClientApplication.class, args);
        }
        
        @GetMapping("/getuser")
        public String getUser(){
            return dubboUserCient.getUser(1L);
        }
    }

        (3)application.properties

    server.port=8088
      
    ## dubbo springboot 配置
    spring.dubbo.application.id=dubbo-server-consumer
    spring.dubbo.application.name=dubbo-server-consumer
    spring.dubbo.registry.protocol=zookeeper
    spring.dubbo.registry.address=192.168.159.129:2181,192.168.159.129:2182,192.168.159.129:2183
    spring.dubbo.server=true
    spring.dubbo.protocol.name=dubbo
    spring.dubbo.protocol.port=2${server.port}

      5.测试

      

    源码

    链接:https://pan.baidu.com/s/1uLCjpKQ3SIpOngQWznr6lw
    提取码:6knl

      

  • 相关阅读:
    Jenkins的安装及使用(一)
    使用 scm-manager 搭建 git/svn 代码管理仓库(二)
    使用 scm-manager 搭建 git/svn 代码管理仓库(一)
    异步处理程序
    观察者模式之烧开水
    Java初转型-SSM配置文件
    Java初转型-Tomcat安装和配置
    Java初转型-MavenWEB项目搭建
    安装 vs2005, vs2008 报错
    SQL Server 数据库邮件 配置
  • 原文地址:https://www.cnblogs.com/zwcry/p/10516194.html
Copyright © 2011-2022 走看看