成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

超詳細(xì),新手都能看懂 !使用SpringBoot+Dubbo 搭建一個(gè)簡(jiǎn)單的分布式服務(wù)

chengtao1633 / 1818人閱讀

Github 地址:https://github.com/Snailclimb/springboot-integration-examples ,歡迎各位 Star。

目錄:

使用 SpringBoot+Dubbo 搭建一個(gè)簡(jiǎn)單分布式服務(wù)

實(shí)戰(zhàn)之前,先來(lái)看幾個(gè)重要的概念

什么是分布式?

什么是 Duboo?

Dubbo 架構(gòu)

什么是 RPC?

為什么要用 Dubbo?

開(kāi)始實(shí)戰(zhàn) 1 :zookeeper 環(huán)境安裝搭建

1. 下載

2. 解壓

3. 進(jìn)入zookeeper目錄,創(chuàng)建data文件夾。

4. 進(jìn)入/zookeeper/conf目錄下,復(fù)制zoo_sample.cfg,命名為zoo.cfg

5. 修改配置文件

6. 啟動(dòng)測(cè)試

開(kāi)始實(shí)戰(zhàn) 2 :實(shí)現(xiàn)服務(wù)接口 dubbo-interface

1. dubbo-interface 項(xiàng)目創(chuàng)建

2. 創(chuàng)建接口類(lèi)

3. 將項(xiàng)目打成 jar 包供其他項(xiàng)目使用

開(kāi)始實(shí)戰(zhàn) 3 :實(shí)現(xiàn)服務(wù)提供者 dubbo-provider

1. dubbo-provider 項(xiàng)目創(chuàng)建

2. pom 文件引入相關(guān)依賴

3. 在 application.properties 配置文件中配置 dubbo 相關(guān)信息

4. 實(shí)現(xiàn)接口

5. 服務(wù)提供者啟動(dòng)類(lèi)編寫(xiě)

開(kāi)始實(shí)戰(zhàn) 4 :實(shí)現(xiàn)服務(wù)消費(fèi)者 dubbo-consumer

4. 編寫(xiě)一個(gè)簡(jiǎn)單 Controller 調(diào)用遠(yuǎn)程服務(wù)

5. 服務(wù)消費(fèi)者啟動(dòng)類(lèi)編寫(xiě)

6. 測(cè)試效果

使用 SpringBoot+Dubbo 搭建一個(gè)簡(jiǎn)單分布式服務(wù) 實(shí)戰(zhàn)之前,先來(lái)看幾個(gè)重要的概念

開(kāi)始實(shí)戰(zhàn)之前,我們先來(lái)簡(jiǎn)單的了解一下這樣幾個(gè)概念:Dubbo、RPC、分布式、由于本文的目的是帶大家使用SpringBoot+Dubbo 搭建一個(gè)簡(jiǎn)單的分布式服務(wù),所以這些概念我只會(huì)簡(jiǎn)單給大家普及一下,不會(huì)做深入探究。

什么是分布式?

分布式或者說(shuō) SOA 分布式重要的就是面向服務(wù),說(shuō)簡(jiǎn)單的分布式就是我們把整個(gè)系統(tǒng)拆分成不同的服務(wù)然后將這些服務(wù)放在不同的服務(wù)器上減輕單體服務(wù)的壓力提高并發(fā)量和性能。比如電商系統(tǒng)可以簡(jiǎn)單地拆分成訂單系統(tǒng)、商品系統(tǒng)、登錄系統(tǒng)等等。

我們可以使用 Dubbo作為分布式系統(tǒng)的橋梁,那么什么是 Dubbo 呢?

什么是 Duboo?

Apache Dubbo (incubating) |?d?b??| 是一款高性能、輕量級(jí)的開(kāi)源Java RPC 框架,它提供了三大核心能力:面向接口的遠(yuǎn)程方法調(diào)用,智能容錯(cuò)和負(fù)載均衡,以及服務(wù)自動(dòng)注冊(cè)和發(fā)現(xiàn)。簡(jiǎn)單來(lái)說(shuō) Dubbo 是一個(gè)分布式服務(wù)框架,致力于提供高性能和透明化的RPC遠(yuǎn)程服務(wù)調(diào)用方案,以及SOA服務(wù)治理方案。

Dubbo 目前已經(jīng)有接近 23k 的 Star ,Dubbo的Github 地址:https://github.com/apache/inc...。另外,在開(kāi)源中國(guó)舉行的2018年度最受歡迎中國(guó)開(kāi)源軟件這個(gè)活動(dòng)的評(píng)選中,Dubbo 更是憑借其超高人氣僅次于 vue.js 和 ECharts 獲得第三名的好成績(jī)。

Dubbo 是由阿里開(kāi)源,后來(lái)加入了 Apache 。正式由于 Dubbo 的出現(xiàn),才使得越來(lái)越多的公司開(kāi)始使用以及接受分布式架構(gòu)。

下面我們簡(jiǎn)單地來(lái)看一下 Dubbo 的架構(gòu),加深對(duì) Dubbo 的理解。

Dubbo 架構(gòu)

下面我們?cè)賮?lái)看看 Dubbo 的架構(gòu),我們后面會(huì)使用 zookeeper 作為注冊(cè)中心,這也是 Dubbo 官方推薦的一種方式。

上述節(jié)點(diǎn)簡(jiǎn)單說(shuō)明:

Provider 暴露服務(wù)的服務(wù)提供方

Consumer 調(diào)用遠(yuǎn)程服務(wù)的服務(wù)消費(fèi)方

Registry 服務(wù)注冊(cè)與發(fā)現(xiàn)的注冊(cè)中心

Monitor 統(tǒng)計(jì)服務(wù)的調(diào)用次數(shù)和調(diào)用時(shí)間的監(jiān)控中心

Container 服務(wù)運(yùn)行容器

調(diào)用關(guān)系說(shuō)明:

服務(wù)容器負(fù)責(zé)啟動(dòng),加載,運(yùn)行服務(wù)提供者。

服務(wù)提供者在啟動(dòng)時(shí),向注冊(cè)中心注冊(cè)自己提供的服務(wù)。

服務(wù)消費(fèi)者在啟動(dòng)時(shí),向注冊(cè)中心訂閱自己所需的服務(wù)。

注冊(cè)中心返回服務(wù)提供者地址列表給消費(fèi)者,如果有變更,注冊(cè)中心將基于長(zhǎng)連接推送變更數(shù)據(jù)給消費(fèi)者。

服務(wù)消費(fèi)者,從提供者地址列表中,基于軟負(fù)載均衡算法,選一臺(tái)提供者進(jìn)行調(diào)用,如果調(diào)用失敗,再選另一臺(tái)調(diào)用。

服務(wù)消費(fèi)者和提供者,在內(nèi)存中累計(jì)調(diào)用次數(shù)和調(diào)用時(shí)間,定時(shí)每分鐘發(fā)送一次統(tǒng)計(jì)數(shù)據(jù)到監(jiān)控中心。

我們?cè)谥v Dubbo 的時(shí)候提到了 Dubbo 實(shí)際上是一款 RPC 框架,那么RPC 究竟是什么呢?相信看了下面我對(duì) RPC 的介紹你就明白了!

什么是 RPC?

RPC(Remote Procedure Call)—遠(yuǎn)程過(guò)程調(diào)用,它是一種通過(guò)網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)程序上請(qǐng)求服務(wù),而不需要了解底層網(wǎng)絡(luò)技術(shù)的協(xié)議。比如兩個(gè)不同的服務(wù)A,B部署在兩臺(tái)不同的機(jī)器上,那么服務(wù) A 如果想要調(diào)用服務(wù) B 中的某個(gè)方法該怎么辦呢?使用 HTTP請(qǐng)求 當(dāng)然可以,但是可能會(huì)比較慢而且一些優(yōu)化做的并不好。 RPC 的出現(xiàn)就是為了解決這個(gè)問(wèn)題。

為什么要用 Dubbo?

如果你要開(kāi)發(fā)分布式程序,你也可以直接基于 HTTP 接口進(jìn)行通信,但是為什么要用 Dubbo呢?

我覺(jué)得主要可以從 Dubbo 提供的下面四點(diǎn)特性來(lái)說(shuō)為什么要用 Dubbo:

負(fù)載均衡——同一個(gè)服務(wù)部署在不同的機(jī)器時(shí)該調(diào)用那一臺(tái)機(jī)器上的服務(wù)

服務(wù)調(diào)用鏈路生成——服務(wù)之間互相是如何調(diào)用的

服務(wù)訪問(wèn)壓力以及時(shí)長(zhǎng)統(tǒng)計(jì)——當(dāng)前系統(tǒng)的壓力主要在哪里,如何來(lái)擴(kuò)容和優(yōu)化

服務(wù)降級(jí)——某個(gè)服務(wù)掛掉之后調(diào)用備用服務(wù)

開(kāi)始實(shí)戰(zhàn) 1 :zookeeper 環(huán)境安裝搭建

我使用的是 CentOS 7.4 阿里云服務(wù)器,注意:如果你也同樣阿里云服務(wù)器必須配置一個(gè)安全組,不然你的應(yīng)用程序會(huì)無(wú)法訪問(wèn)你的 zookeeper 服務(wù)器,這一點(diǎn)我在后面也提到了。

1. 下載

通過(guò) http://mirror.bit.edu.cn/apache/zookeeper/ 這個(gè)鏈接下載,然后上傳到Linux上。(可以說(shuō)那個(gè) Xhell 附帶的文件傳輸功能)

或者直接在Linux中使用 wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz 命令下載(版本號(hào) 3.4.12 是我寫(xiě)這篇文章的時(shí)候最新的穩(wěn)定版本,各位可以根據(jù)實(shí)際情況修改)

2. 解壓
tar -zxvf zookeeper-3.4.12-alpha.tar.gz

解壓完畢之后修改一下解壓之后所得的文件夾名

mv zookeeper-3.4.12 zookeeper

刪除 zookeeper 安裝包

rm -rf zookeeper-3.4.12.tar.gz
3. 進(jìn)入zookeeper目錄,創(chuàng)建data文件夾。
mkdir data

進(jìn)入 data 文件夾 然后執(zhí)行pwd命令,復(fù)制所得的當(dāng)前目錄位置(就是我用紅色圈出來(lái)的文字)

4. 進(jìn)入/zookeeper/conf目錄下,復(fù)制zoo_sample.cfg,命名為zoo.cfg
cp zoo_sample.cfg zoo.cfg
5. 修改配置文件

使用 vim zoo.cfg 命令修改配置文件

vim 文件------>進(jìn)入文件----->命令模式------>按i進(jìn)入編輯模式----->編輯文件    ------->按Esc進(jìn)入底行模式----->輸入:wq/q! (輸入wq代表寫(xiě)入內(nèi)容并退出,即保存;輸入q!代表強(qiáng)制退出不保存。)

修改配置文件中的 data 屬性:

dataDir=/usr/local/zookeeper/data
6. 啟動(dòng)測(cè)試

進(jìn)入 /zookeeper/bin 目錄然后執(zhí)行下面的命令

./zkServer.sh start

執(zhí)行 ./zkServer.sh status 查看當(dāng)前 zookeeper 狀態(tài)。

或者運(yùn)行 netstat -lntup 命令查看網(wǎng)絡(luò)狀態(tài),可以看到 zookeeper 的端口號(hào) 2181 已經(jīng)被占用

注意沒(méi)有關(guān)閉防火墻可能出現(xiàn)的問(wèn)題?。。?/p>

如果你使用的阿里云服務(wù)器注意配置相關(guān)安全組:

進(jìn)入本實(shí)例安全組頁(yè)面

選擇配置規(guī)則

選擇添加安全組規(guī)則,然后按照下圖配置

在開(kāi)始實(shí)戰(zhàn)之前提個(gè)建議:盡量新建一個(gè)文件夾,然后后面將接口項(xiàng)目、服務(wù)提供者以及服務(wù)消費(fèi)者都放在這個(gè)文件夾。

開(kāi)始實(shí)戰(zhàn) 2 :實(shí)現(xiàn)服務(wù)接口 dubbo-interface

主要分為下面幾步:

創(chuàng)建 Maven 項(xiàng)目;

創(chuàng)建接口類(lèi)

將項(xiàng)目打成 jar 包供其他項(xiàng)目使用

項(xiàng)目結(jié)構(gòu):

dubbo-interface 后面被打成 jar 包,它的作用只是提供接口。

1. dubbo-interface 項(xiàng)目創(chuàng)建

File->New->Module... ,然后選擇 Maven類(lèi)型的項(xiàng)目,其他的按照提示一步一步走就好。

2. 創(chuàng)建接口類(lèi)
package top.snailclimb.service;

public interface HelloService {

    public  String sayHello(String name);
}
3. 將項(xiàng)目打成 jar 包供其他項(xiàng)目使用

點(diǎn)擊右邊的 Maven Projects 然后選擇 install ,這樣 jar 寶就打好了。

開(kāi)始實(shí)戰(zhàn) 3 :實(shí)現(xiàn)服務(wù)提供者 dubbo-provider

主要分為下面幾步:

創(chuàng)建 springboot 項(xiàng)目;

加入 dubbo 、zookeeper以及接口的相關(guān)依賴 jar 包;

在 application.properties 配置文件中配置 dubbo 相關(guān)信息;

實(shí)現(xiàn)接口類(lèi);

服務(wù)提供者啟動(dòng)類(lèi)編寫(xiě)

項(xiàng)目結(jié)構(gòu):

1. dubbo-provider 項(xiàng)目創(chuàng)建

創(chuàng)建一個(gè) SpringBoot 項(xiàng)目,注意勾選上 web 模塊。不會(huì)創(chuàng)建的話,可以查看下面這篇文章:,可以說(shuō)很詳細(xì)了。

https://blog.csdn.net/qq_34337272/article/details/79563606

2. pom 文件引入相關(guān)依賴

需要引入 dubbo 、zookeeper以及接口的相關(guān)依賴 jar 包。注意將本項(xiàng)目和 dubbo-interface 項(xiàng)目的 dependency 依賴的 groupId 和 artifactId 改成自己的。dubbo 整合spring boot 的 jar 包在這里找dubbo-spring-boot-starter。zookeeper 的 jar包在 Maven 倉(cāng)庫(kù) 搜索 zkclient 即可找到。

        
            top.snailclimb
            dubbo-interface
            1.0-SNAPSHOT
        
        
        
            com.alibaba.spring.boot
            dubbo-spring-boot-starter
            2.0.0
        
        
        
            com.101tec
            zkclient
            0.10
        
3. 在 application.properties 配置文件中配置 dubbo 相關(guān)信息

配置很簡(jiǎn)單,這主要得益于 springboot 整合 dubbo 專(zhuān)屬的@EnableDubboConfiguration 注解提供的 Dubbo 自動(dòng)配置。

# 配置端口
server.port=8333

spring.dubbo.application.name=dubbo-provider
spring.dubbo.application.registry=zookeeper://ip地址:2181
4. 實(shí)現(xiàn)接口

注意: @Service 注解使用的時(shí) Dubbo 提供的而不是 Spring 提供的。另外,加了Dubbo 提供的 @Service 注解之后還需要加入

package top.snailclimb.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
import top.snailclimb.service.HelloService;

@Component
@Service
public class HelloServiceImpl implements HelloService {
    @Override
    public String sayHello(String name) {
        return "Hello " + name;
    }
}
5. 服務(wù)提供者啟動(dòng)類(lèi)編寫(xiě)

注意:不要忘記加上 @EnableDubboConfiguration 注解開(kāi)啟Dubbo 的自動(dòng)配置。

package top.snailclimb;

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

@SpringBootApplication
// 開(kāi)啟dubbo的自動(dòng)配置
@EnableDubboConfiguration
public class DubboProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(DubboProviderApplication.class, args);
    }
}
開(kāi)始實(shí)戰(zhàn) 4 :實(shí)現(xiàn)服務(wù)消費(fèi)者 dubbo-consumer

主要分為下面幾步:

創(chuàng)建 springboot 項(xiàng)目;

加入 dubbo 、zookeeper以及接口的相關(guān)依賴 jar 包;

在 application.properties 配置文件中配置 dubbo 相關(guān)信息;

編寫(xiě)測(cè)試類(lèi);

服務(wù)消費(fèi)者啟動(dòng)類(lèi)編寫(xiě)

測(cè)試效果

項(xiàng)目結(jié)構(gòu):

第1,2,3 步和服務(wù)提供者的一樣,這里直接從第 4 步開(kāi)始。

4. 編寫(xiě)一個(gè)簡(jiǎn)單 Controller 調(diào)用遠(yuǎn)程服務(wù)
package top.snailclimb.dubboconsumer;

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

@RestController
public class HelloController {
    @Reference
    private HelloService helloService;

    @RequestMapping("/hello")
    public String hello() {
        String hello = helloService.sayHello("world");
        System.out.println(helloService.sayHello("SnailClimb"));
        return hello;
    }
}
5. 服務(wù)消費(fèi)者啟動(dòng)類(lèi)編寫(xiě)
package top.snailclimb.dubboconsumer;

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

@SpringBootApplication
@EnableDubboConfiguration
public class DubboConsumerApplication {

    public static void main(String[] args) {

        SpringApplication.run(DubboConsumerApplication.class, args);
    }
}
6. 測(cè)試效果

瀏覽器訪問(wèn) http://localhost:8330/hello 頁(yè)面返回 Hello world,控制臺(tái)輸出 Hello SnailClimb,和預(yù)期一直,使用SpringBoot+Dubbo 搭建第一個(gè)簡(jiǎn)單的分布式服務(wù)實(shí)驗(yàn)成功!

ThoughtWorks準(zhǔn)入職Java工程師。專(zhuān)注Java知識(shí)分享!開(kāi)源 Java 學(xué)習(xí)指南——JavaGuide(12k+ Star)的作者。公眾號(hào)多篇文章被各大技術(shù)社區(qū)轉(zhuǎn)載。公眾號(hào)后臺(tái)回復(fù)關(guān)鍵字“1”可以領(lǐng)取一份我精選的Java資源哦!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/72467.html

相關(guān)文章

  • 【推薦】最新200篇:技術(shù)文章整理

    摘要:作為面試官,我是如何甄別應(yīng)聘者的包裝程度語(yǔ)言和等其他語(yǔ)言的對(duì)比分析和主從復(fù)制的原理詳解和持久化的原理是什么面試中經(jīng)常被問(wèn)到的持久化與恢復(fù)實(shí)現(xiàn)故障恢復(fù)自動(dòng)化詳解哨兵技術(shù)查漏補(bǔ)缺最易錯(cuò)過(guò)的技術(shù)要點(diǎn)大掃盲意外宕機(jī)不難解決,但你真的懂?dāng)?shù)據(jù)恢復(fù)嗎每秒 作為面試官,我是如何甄別應(yīng)聘者的包裝程度Go語(yǔ)言和Java、python等其他語(yǔ)言的對(duì)比分析 Redis和MySQL Redis:主從復(fù)制的原理詳...

    BicycleWarrior 評(píng)論0 收藏0
  • 【推薦】最新200篇:技術(shù)文章整理

    摘要:作為面試官,我是如何甄別應(yīng)聘者的包裝程度語(yǔ)言和等其他語(yǔ)言的對(duì)比分析和主從復(fù)制的原理詳解和持久化的原理是什么面試中經(jīng)常被問(wèn)到的持久化與恢復(fù)實(shí)現(xiàn)故障恢復(fù)自動(dòng)化詳解哨兵技術(shù)查漏補(bǔ)缺最易錯(cuò)過(guò)的技術(shù)要點(diǎn)大掃盲意外宕機(jī)不難解決,但你真的懂?dāng)?shù)據(jù)恢復(fù)嗎每秒 作為面試官,我是如何甄別應(yīng)聘者的包裝程度Go語(yǔ)言和Java、python等其他語(yǔ)言的對(duì)比分析 Redis和MySQL Redis:主從復(fù)制的原理詳...

    tommego 評(píng)論0 收藏0
  • 【C++從0到1】新手都能看懂C++入門(mén)(上篇),建議收藏

    摘要:上面這三種均不造成重載,現(xiàn)在來(lái)說(shuō)明原因。結(jié)論對(duì)于引用返回,返回的對(duì)象必須是棧幀銷(xiāo)毀后還存在的。全局,靜態(tài),未銷(xiāo)毀的函數(shù)棧幀當(dāng)中的都是可以的指針與引用如圖兩者底層實(shí)現(xiàn)差不多,引用是用指針模擬的。不建議聲明和定義分離,分離會(huì)導(dǎo)致鏈接錯(cuò)誤。 ...

    xcold 評(píng)論0 收藏0
  • 新手也能看懂,消息隊(duì)列其實(shí)很簡(jiǎn)單

    摘要:通過(guò)以上分析我們可以得出消息隊(duì)列具有很好的削峰作用的功能即通過(guò)異步處理,將短時(shí)間高并發(fā)產(chǎn)生的事務(wù)消息存儲(chǔ)在消息隊(duì)列中,從而削平高峰期的并發(fā)事務(wù)。 該文已加入開(kāi)源項(xiàng)目:JavaGuide(一份涵蓋大部分Java程序員所需要掌握的核心知識(shí)的文檔類(lèi)項(xiàng)目,Star 數(shù)接近 16k)。地址:https://github.com/Snailclimb... 本文內(nèi)容思維導(dǎo)圖:showImg(ht...

    Clect 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<