springboot集成dubbo的入門demo

 

前言

繼上一篇ZooKeeper的安裝和啓動,本篇將結合springboot+duboo+zookeeper來一次實戰演練,話不多說,繼續我們的實戰。

dubbo介紹

Dubbo(讀音[ˈdʌbəʊ])是阿里巴巴公司開源的一個高性能優秀的服務框架,使得應用可通過高性能的 RPC 實現服務的輸出和輸入功能,可以和 Spring框架無縫集成。(現在有當當網在維護)

Dubbo是一款高性能、輕量級的開源Java RPC框架,它提供了三大核心能力:面向接口的遠程方法調用,智能容錯和負載均衡,以及服務自動註冊和發現。

dubbo核心工作原理

 

名詞解釋:

節點 角色說明
Provider 暴露服務的服務提供方
Registry 服務的註冊與發現的註冊中心,如zookeper(推薦)、multicast、redis、simple
Consumer 調用遠程服務的服務消費方
Monitor 統計服務的調用次數和調用時間的監控中心
Container 服務運行容器

調用流程

  • 服務器負責啓動,加載,運行服務提供者。

  • 服務提供者在啓動時,向註冊中心註冊自己所提供的服務

  • 服務消費者在啓動時,向註冊中心訂閱自己所需的服務

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

  • 服務消費者從提供的服務列表中,基於軟負載均衡算法,選一臺提供者進行調用,如果失敗,則選擇另一臺調用

  • 服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到檢測中心

由於本篇是實戰演練,dubbo的介紹就簡單到這裏。

springBoot-dubbo項目搭建

1.項目結構

項目結構如下圖所示:

1.dubbo-provider---服務提供者,springboot構建

2.dubbo-consumer---服務消費者,springboot構建

3.dubbo-api---服務提供者的接口API,maven構建

結合dubbo的工作原理理解:

  • dubbo-provider先在容器裏初始化啓動
  • dubbo-provider去註冊中心(zookeeper)去註冊服務
  • dubbo-consumer去註冊中心訂閱自己所需的服務
  • 註冊中心返回dubbo-provider的服務地址列表給消費者
  • dubbo-consumer直接去調用dubbo-provider服務
  • dubbo-consumer和dubbo-provider在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到檢測中心

2.項目依賴

dubbo-provider和dubbo-consumer都需要依賴下面的jar包

        <!-- dubbo依賴 -->
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>

        <!-- 引入zookeeper的依賴 -->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>

3.服務提供者

服務提供者dubbo-provider提供TestService.testApi(String name)接口

package com.dubbo.provider.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.dubbo.service.TestService;
import org.springframework.stereotype.Component;

//dubbo註解,暴露服務
@Service
@Component
public class TestServiceImpl implements TestService {

    @Override
    public String testApi(String name) {
        return "I am test:" + name;
    }
}
package com.dubbo.provider;

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

//開啓dubbo的自動配置
@EnableDubboConfiguration
@SpringBootApplication
public class DubboProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(DubboProviderApplication.class, args);
    }

}

application.properties文件配置:

#配置端口
server.port=8088

spring.dubbo.application.name=dubbo-provider
spring.dubbo.application.registry=zookeeper://127.0.0.1:2181

4.服務消費者

dubbo-consumer遠程調用dubbo-provider提供的服務TestService.testApi(String name)接口

package com.dubbo.consumer.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.dubbo.service.TestService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @Reference
    private TestService testService;

    @RequestMapping(value = "/test")
    public String hello() {
        String hello = testService.testApi("One");
        return hello;
    }

}
package com.dubbo.consumer;

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//開啓dubbo的自動配置
@EnableDubboConfiguration
@SpringBootApplication
public class DubboConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(DubboConsumerApplication.class, args);
    }

}

application.properties文件配置:

# 配置端口
server.port=8099

spring.dubbo.application.name=dubbo-consumer
spring.dubbo.application.registry=zookeeper://127.0.0.1:2181

5.測試

A.先啓動本地的ZooKeeper(我本地已經安裝了zk,沒安裝的同學可以參照我上一篇文章安裝即可:https://mp.csdn.net/postedit/104081563

B.再啓動服務提供者dubbo-provider,如下圖所示則表示服務已經向註冊中心(ZooKeeper)註冊成功了

 

C.啓動服務消費者dubbo-consumer,如下圖所示則表示服務已經向註冊中心(ZooKeeper)訂閱成功了

這裏可以看出和服務提供者是一樣的打印輸出。

D.結果展示

至此,整個集成過程的實戰演練就結束了,有沒有覺得很簡單呢,自己趕緊動手試試吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章