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

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM