SpringBoot整合Zookeeper和Dubbo


一、Dubbo

   1、 Dubbo定義

Dubbo是Alibaba開源的分布式服務框架,它最大的特點是按照分層的方
式來架構,使用這種方式可以使各個層之間解耦合(或者最大限度地松耦
合)。從服務模型的角度來看,Dubbo采用的是一種非常簡單的模型,要
么是提供方提供服務,要么是消費方消費服務,所以基於這一點可以抽象
出服務提供方(Provider)和服務消費方(Consumer)兩個角色。

Dubbo就是資源調度和治理中心的管理工具。

2、Dubbo架構

 

節點角色說明:

Provider: 暴露服務的服務提供方。

Consumer: 調用遠程服務的服務消費方。

Registry: 服務注冊與發現的注冊中心。

Monitor: 統計服務的調用次調和調用時間的監控中心。

Container: 服務運行容器。

調用關系說明:

0. 服務容器負責啟動,加載,運行服務提供者。

1. 服務提供者在啟動時,向注冊中心注冊自己提供的服務。

2. 服務消費者在啟動時,向注冊中心訂閱自己所需的服務。

3. 注冊中心返回服務提供者地址列表給消費者,如果有變更,注冊中心將基於長連接推送變更數據給消費者。

4. 服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一台提供者進行調用,如果調用失敗,再選另一台調用。

5. 服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鍾發送一次統計數據到監控中心。

二、注冊中心

1. Zookeeper介紹

官方推薦使用zookeeper注冊中心。

注冊中心負責服務地址的注冊與查找,相當於目錄服務,服務提供者和消費者只在啟動時與注冊中心交互,注冊中心不轉發請求,壓力較小。使用dubbo-2.3.3以上版本,建議使用zookeeper注冊中心。

Zookeeper是Apacahe Hadoop的子項目,是一個樹型的目錄服務,支持變更推送,適合作為Dubbo服務的注冊中心,工業強度較高,可用於生產環境,並推薦使用

Zookeeper:

1、可以作為集群的管理工具使用。

2、可以集中管理配置文件。

三、SpringBoot整合Dubbo

1、新建provider模塊 springboot-dubbo-server

 引入依賴

 <!-- Spring Boot 啟動父依賴 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
        <relativePath/>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--dubbo依賴-->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
        <!--zkclient依賴-->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--mybatis起步依賴-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>
        <!--mysql依賴-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

 

application.properties

 

#應用名稱 dubbo.application.name=provider #注冊中心地址 dubbo.registry.address=zookeeper://localhost:2181
#服務類包目錄 dubbo.scan.base-packages=com.yehui.service ##協議名稱 #dubbo.protocol.name=dubbo ##協議端口 #dubbo.protocol.port=20880 server.port=8087 spring.datasource.password=root spring.datasource.username=root spring.datasource.url=jdbc:mysql://localhost:3306/study
spring.datasource.driver-class-name=com.mysql.jdbc.Driver mybatis.mapper-locations=classpath:mapper/*.xml #spring.dubbo.application.name 應用名稱 #spring.dubbo.registry.address 注冊中心地址 #spring.dubbo.protocol.name 協議名稱 #spring.dubbo.protocol.port 協議端口 #spring.dubbo.scan dubbo 服務類包目錄 #spring.dubbo.scan 掃描包

 

 

 

創建接口

public interface DubboService { public List<TbUser> selectList(); }

 

實現類

@Component @Service public class DubboServiceImpl implements DubboService { @Autowired private DubboMapper dubboMapper; @Override public List<TbUser> selectList() { return dubboMapper.selectList(); } }

 

mapper接口

@Mapper
public interface DubboMapper {
    public List<TbUser> selectList();

}

 

實體類

public class TbUser implements Serializable { private Integer id; private String username; private String age;

 

mapper.xml

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yehui.mapper.DubboMapper">
    <select id="selectList" resultType="com.yehui.entity.TbUser"> select * from tb_user </select>
</mapper>

 

啟動類

@SpringBootApplication @EnableDubboConfiguration//注解必須有否則否則會報錯
public class DubboApplication { public static void main(String[] args) { SpringApplication.run(DubboApplication.class,args); } }

 

啟動zookeeper之后在啟動主啟動類

2、消費者模塊springboot-dubbo-client

引入依賴

    <!-- Spring Boot 啟動父依賴 這個依賴也不少 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
    </parent>
    <dependencies>

        <dependency>
            <groupId>com.yehui</groupId>
            <artifactId>springboot-dubbo-server</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

 

application.properties文件

## Dubbo 服務提供者配置 dubbo.application.name=cutomer dubbo.registry.address=zookeeper://192.168.1.8:2181
 server.port=8088 spring.datasource.password=root spring.datasource.username=root spring.datasource.url=jdbc:mysql://localhost:3306/study
spring.datasource.driver-class-name=com.mysql.jdbc.Driver mybatis.mapper-locations=classpath:mapper/*.xml

 

controller類

@RestController
public class DubboController {

    @Reference
    private DubboService dubboService;

    @RequestMapping("/findAll")
    public List<TbUser> findAll(){
        return dubboService.selectList();
    }
}

 

主啟動類

@SpringBootApplication @EnableDubboConfiguration //這個注解不能少
public class StartAppClient { public static void main(String[] args) { SpringApplication.run(StartAppClient.class); } }

 

啟動主啟動類測試

 


免責聲明!

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



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