日本特黄特黄特级高潮,久操久操看片中文,国产精品无码卡在线播放,朋友的朋友4在线观看中文,在线 欧美 中文 亚洲 精品

當(dāng)前位置: 首頁 >  資訊  > 正文

微服務(wù)圣經(jīng)1:零基礎(chǔ)搭建一套SpringCloud微服務(wù)腳手架(SpringCloud+Dubbo+Docker+Jenkins) 快訊

  • 2023-05-18 17:01:04 來源:博客園

文章很長,且持續(xù)更新,建議收藏起來,慢慢讀!瘋狂創(chuàng)客圈總目錄 博客園版為您奉上珍貴的學(xué)習(xí)資源 :

免費(fèi)贈(zèng)送 :《尼恩Java面試寶典》持續(xù)更新+ 史上最全 + 面試必備 2000頁+ 面試必備 + 大廠必備 +漲薪必備免費(fèi)贈(zèng)送 :《尼恩技術(shù)圣經(jīng)+高并發(fā)系列PDF》,幫你 實(shí)現(xiàn)技術(shù)自由,完成職業(yè)升級, 薪酬猛漲!加尼恩免費(fèi)領(lǐng)免費(fèi)贈(zèng)送 經(jīng)典圖書:《Java高并發(fā)核心編程(卷1)加強(qiáng)版》面試必備 + 大廠必備 +漲薪必備 加尼恩免費(fèi)領(lǐng)免費(fèi)贈(zèng)送 經(jīng)典圖書:《Java高并發(fā)核心編程(卷2)加強(qiáng)版》面試必備 + 大廠必備 +漲薪必備 加尼恩免費(fèi)領(lǐng)免費(fèi)贈(zèng)送 經(jīng)典圖書:《Java高并發(fā)核心編程(卷3)加強(qiáng)版》面試必備 + 大廠必備 +漲薪必備 加尼恩免費(fèi)領(lǐng)

免費(fèi)贈(zèng)送 資源寶庫: Java 必備 百度網(wǎng)盤資源大合集 價(jià)值>10000元 加尼恩領(lǐng)取


(資料圖片僅供參考)

零基礎(chǔ) 搭建一套SpringCloud微服務(wù)腳手架(SpringCloud+ Dubbo + Docker + Jenkins)

說在前面

在40歲老架構(gòu)師尼恩的讀者社群(50+)中,大量的小伙伴是架構(gòu)師、高級開發(fā),大家都有豐富的開發(fā)、架構(gòu)經(jīng)驗(yàn)。

在開發(fā)過程中,一般情況下,大家都是用現(xiàn)有的開發(fā)框架。

導(dǎo)致的一個(gè)嚴(yán)重問題是:很少有小伙伴能從0開始 搭建一套SpringCloud微服務(wù)腳手架(SpringCloud+ Dubbo + Docker + Jenkins)。然而,零基礎(chǔ) 搭建一套SpringCloud微服務(wù)腳手架(SpringCloud+ Dubbo + Docker + Jenkins),這個(gè)實(shí)操對大家來說,至關(guān)重要。

尼恩一直在找一個(gè)契機(jī),給大家梳理一個(gè)《零基礎(chǔ) 搭建一套SpringCloud微服務(wù)腳手架》 博客。提升大家的實(shí)操能力,動(dòng)手能力。

直到今天、契機(jī)終于來了。

從2020年開始,尼恩一直在寫一本 微服務(wù)架構(gòu)和開發(fā)領(lǐng)域的 至尊寶典 《SpringCloud 學(xué)習(xí)圣經(jīng)》,全量的博客加起來全網(wǎng)閱讀量在100W+。在這么大訪問量的激勵(lì)下,尼恩一直在對這本 《SpringCloud 學(xué)習(xí)圣經(jīng)》進(jìn)行迭代。

而且由于尼恩一人有精力有限,在尼恩的《技術(shù)自由圈》 高并發(fā)研究社群中,不斷吸取有志之士的加入。咱們社群中一位資深的、華中科技大學(xué)碩士、有著10年開發(fā)和架構(gòu)經(jīng)驗(yàn)、并且管理一個(gè)20人團(tuán)隊(duì)的架構(gòu)師 Andy加入了咱們技術(shù)迭代、技術(shù)研究的隊(duì)伍。

他來給大家提供了一個(gè)優(yōu)秀的微服務(wù) 基礎(chǔ)架構(gòu)實(shí)操案例,《零基礎(chǔ) 搭建一套SpringCloud微服務(wù)腳手架》。

這,就是本文。當(dāng)然,本文也收入了咱們的 10W字 至尊寶典 《SpringCloud alibaba 學(xué)習(xí)圣經(jīng)》最新升級版, 《SpringCloud alibaba 學(xué)習(xí)圣經(jīng)》寶典從此升級到了V3版本。

最新的 PDF 文檔,可以通過 公眾號 技術(shù)自由圈領(lǐng)取。

本文目錄

目錄
  • 零基礎(chǔ) 搭建一套SpringCloud微服務(wù)腳手架(SpringCloud+ Dubbo + Docker + Jenkins)
    • 說在前面
    • 本文目錄
    • 1、本文學(xué)習(xí)內(nèi)容和目標(biāo)
    • 2、設(shè)計(jì)微服務(wù)框架的基本原則
      • 1.解耦和獨(dú)立性:
      • 2.可伸縮性和容錯(cuò)性:
      • 3.簡化開發(fā)和部署過程:
      • 4.兼容性和可擴(kuò)展性:
    • 3、搭建基礎(chǔ)設(shè)施
      • 1.安裝Java開發(fā)環(huán)境
        • 工具介紹:
        • 下載地址:
        • 安裝方式:
        • 操作示例:
      • 2.安裝和配置Maven
        • 工具介紹:
        • 下載地址:
        • 安裝方式:
        • 操作示例:
      • 3.安裝和配置Git
        • 工具介紹:
        • 下載地址:
        • 安裝方式:
        • 操作示例:
      • 4.安裝集成開發(fā)環(huán)境(IDE)
        • 工具介紹:
        • 下載地址:
        • 安裝方式:
        • 操作示例:
      • 5.創(chuàng)建項(xiàng)目和配置構(gòu)建工具
    • 4、定義微服務(wù)接口和協(xié)議
      • 1.引入JPA依賴
      • 2.示例表結(jié)構(gòu)
      • 3.application.yml配置
      • 4.定義學(xué)生實(shí)體類
      • 5.定義學(xué)生信息的持久化接口
      • 6.定義學(xué)生信息的控制器接口
    • 5、實(shí)現(xiàn)服務(wù)注冊與發(fā)現(xiàn)
      • 1.安裝和配置Nacos
      • 2.引入Nacos相關(guān)依賴
      • 3.系統(tǒng)配置變更
      • 4.示例代碼
    • 6、實(shí)現(xiàn)服務(wù)調(diào)用和負(fù)載均衡
    • 7、實(shí)現(xiàn)服務(wù)監(jiān)控和日志管理
      • 1.Spring Boot Admin 服務(wù)監(jiān)控
      • 2.ELK 日志監(jiān)控
      • ELK安裝
      • 微服務(wù)應(yīng)用接入
    • 8、保護(hù)服務(wù)安全
    • 9、實(shí)現(xiàn)持續(xù)集成和部署
      • 1.Jenkins
      • 2.Docker
      • 3.配置步驟
    • 10、小結(jié)
    • 技術(shù)自由的實(shí)現(xiàn)路徑:
      • 實(shí)現(xiàn)你的 架構(gòu)自由:
      • 實(shí)現(xiàn)你的 響應(yīng)式 自由:
      • 實(shí)現(xiàn)你的 spring cloud 自由:
      • 實(shí)現(xiàn)你的 linux 自由:
      • 實(shí)現(xiàn)你的 網(wǎng)絡(luò) 自由:
      • 實(shí)現(xiàn)你的 分布式鎖 自由:
      • 實(shí)現(xiàn)你的 王者組件 自由:
      • 實(shí)現(xiàn)你的 面試題 自由:
    • 免費(fèi)獲取11個(gè)技術(shù)圣經(jīng)PDF:

1、本文學(xué)習(xí)內(nèi)容和目標(biāo)

微服務(wù)架構(gòu)通過將復(fù)雜的單體應(yīng)用拆分為一組小型、自治的服務(wù),為構(gòu)建靈活、可擴(kuò)展的應(yīng)用提供了一種新的方式。

微服務(wù)框架具有以下優(yōu)勢:

  • 模塊化和可擴(kuò)展性:微服務(wù)框架將應(yīng)用程序拆分成多個(gè)獨(dú)立的服務(wù),每個(gè)服務(wù)可以獨(dú)立開發(fā)、部署和擴(kuò)展,提高了系統(tǒng)的靈活性和可伸縮性。
  • 技術(shù)多樣性:微服務(wù)框架支持使用不同的技術(shù)棧和編程語言來構(gòu)建不同的服務(wù),使團(tuán)隊(duì)可以根據(jù)具體需求選擇最合適的技術(shù)。
  • 高可用性和容錯(cuò)性:微服務(wù)框架通過服務(wù)注冊與發(fā)現(xiàn)、負(fù)載均衡和容錯(cuò)機(jī)制,提供了高可用性和容錯(cuò)性,保證了系統(tǒng)的穩(wěn)定性和可靠性。
  • 獨(dú)立部署和快速迭代:每個(gè)服務(wù)可以獨(dú)立部署,使團(tuán)隊(duì)可以快速迭代和發(fā)布新功能,提高了開發(fā)和交付的效率。

在構(gòu)建微服務(wù)系統(tǒng)時(shí),選擇一個(gè)適合的框架可以加速開發(fā)過程并提高系統(tǒng)的穩(wěn)定性和可維護(hù)性。

本文旨在通過手把手教程,引導(dǎo)讀者從零開始搭建一套Java微服務(wù)框架。

我們將使用Spring Cloud作為基礎(chǔ)框架,并結(jié)合Nacos作為服務(wù)注冊中心,Spring Cloud Gateway作為API網(wǎng)關(guān),以及Feign作為服務(wù)之間的通信方式。

此外,我們還將探討如何使用Docker容器化和Jenkins進(jìn)行持續(xù)集成和部署,以構(gòu)建一個(gè)完整的微服務(wù)架構(gòu)。

通過本文的學(xué)習(xí),讀者將掌握以下技能:

  • 設(shè)計(jì)和搭建微服務(wù)框架的基本原則
  • 配置和使用Spring Cloud、Nacos、Spring Cloud Gateway和Feign等關(guān)鍵組件
  • 實(shí)現(xiàn)服務(wù)注冊與發(fā)現(xiàn)、服務(wù)調(diào)用和負(fù)載均衡、服務(wù)監(jiān)控和日志管理、服務(wù)安全和認(rèn)證授權(quán)等核心功能
  • 應(yīng)用Docker容器化和Jenkins進(jìn)行持續(xù)集成和部署

在開始構(gòu)建自己的Java微服務(wù)框架之前,讓我們先了解下設(shè)計(jì)微服務(wù)框架要遵守的一些基本原則。

2、設(shè)計(jì)微服務(wù)框架的基本原則

在設(shè)計(jì)微服務(wù)框架時(shí),我們需要遵循一些基本原則,以確保系統(tǒng)的可擴(kuò)展性、可維護(hù)性和可靠性。以下是設(shè)計(jì)微服務(wù)框架的基本原則:

1.解耦和獨(dú)立性:

微服務(wù)架構(gòu)的核心概念之一是服務(wù)的解耦和獨(dú)立性。每個(gè)微服務(wù)應(yīng)該具有清晰的邊界,它們可以獨(dú)立開發(fā)、部署和擴(kuò)展。在設(shè)計(jì)框架時(shí),要保證各個(gè)微服務(wù)之間的解耦,使其可以獨(dú)立演化而不會(huì)對其他服務(wù)產(chǎn)生過多的影響。

2.可伸縮性和容錯(cuò)性:

微服務(wù)架構(gòu)的另一個(gè)重要目標(biāo)是實(shí)現(xiàn)可伸縮性和容錯(cuò)性??蚣軕?yīng)該能夠根據(jù)負(fù)載的增加或減少,自動(dòng)擴(kuò)展或縮減服務(wù)實(shí)例的數(shù)量。同時(shí),要考慮到服務(wù)的容錯(cuò)能力,當(dāng)某個(gè)服務(wù)出現(xiàn)故障時(shí),框架應(yīng)該能夠自動(dòng)將請求路由到其他可用的服務(wù)實(shí)例上。

3.簡化開發(fā)和部署過程:

微服務(wù)框架應(yīng)該能夠簡化開發(fā)和部署的過程。提供一套標(biāo)準(zhǔn)化的開發(fā)模式和工具鏈,使開發(fā)人員可以快速構(gòu)建和部署微服務(wù)。自動(dòng)化的構(gòu)建、測試和部署流程能夠提高開發(fā)效率,減少人為錯(cuò)誤。

4.兼容性和可擴(kuò)展性:

框架應(yīng)該具備良好的兼容性和可擴(kuò)展性,能夠與其他技術(shù)和組件進(jìn)行集成。例如,能夠無縫地與現(xiàn)有的數(shù)據(jù)存儲、消息隊(duì)列、認(rèn)證授權(quán)系統(tǒng)等進(jìn)行整合。此外,框架本身也應(yīng)該是可擴(kuò)展的,可以根據(jù)需求靈活地添加新的功能模塊。

設(shè)計(jì)微服務(wù)框架時(shí),需要綜合考慮這些原則,并根據(jù)實(shí)際情況進(jìn)行權(quán)衡和取舍。合理的框架設(shè)計(jì)能夠提高開發(fā)效率、降低系統(tǒng)復(fù)雜度,并為微服務(wù)架構(gòu)的可持續(xù)發(fā)展打下堅(jiān)實(shí)的基礎(chǔ)。在后續(xù)的章節(jié)中,我們將深入探討如何應(yīng)用這些原則,結(jié)合Spring Cloud、Nacos、Spring Cloud Gateway、Feign等組件,構(gòu)建一套高效可靠的Java微服務(wù)框架。

3、搭建基礎(chǔ)設(shè)施

在搭建微服務(wù)框架之前,我們需要配置一些基礎(chǔ)設(shè)施,包括Java開發(fā)環(huán)境、構(gòu)建工具、版本控制和集成開發(fā)環(huán)境(IDE)。下面是一些常用的工具和配置:

1.安裝Java開發(fā)環(huán)境

工具介紹:

首先,確保你的系統(tǒng)上已經(jīng)安裝了Java開發(fā)工具包,Java開發(fā)環(huán)境包括Java Development Kit(JDK),它是開發(fā)和運(yùn)行Java應(yīng)用程序所必需的工具包。

你可以從Oracle官方網(wǎng)站或OpenJDK項(xiàng)目中下載并安裝最新版本的JDK。

安裝完成后,設(shè)置JAVA_HOME環(huán)境變量,指向JDK的安裝目錄。

下載地址:

  • Oracle JDK: https://www.oracle.com/java/technologies/javase-jdk11-downloads.html
  • OpenJDK: https://adoptopenjdk.net/

安裝方式:

  1. 根據(jù)你的操作系統(tǒng)選擇合適的Java發(fā)行版。
  2. 下載安裝程序并運(yùn)行。
  3. 按照安裝向?qū)У闹敢瓿砂惭b。
  4. 配置JAVA_HOME環(huán)境變量:
    • Windows:在系統(tǒng)變量中新建一個(gè)名為JAVA_HOME的變量,值為JDK的安裝路徑(例如:D:\program\Java\jdk1.8.0_202)。
    • macOS/Linux:在終端中編輯~/.bashrc或~/.bash_profile文件,并添加以下行:export JAVA_HOME=/path/to/jdk。然后運(yùn)行source ~/.bashrcsource ~/.bash_profile命令使配置生效。

操作示例:

  1. 打開命令行終端。
  2. 執(zhí)行以下命令驗(yàn)證Java安裝是否成功:
java -version
  1. 如果成功安裝,會(huì)顯示Java版本信息。

2.安裝和配置Maven

工具介紹:

Apache Maven是一款流行的構(gòu)建工具,用于管理Java項(xiàng)目的依賴和構(gòu)建過程。你可以從Apache Maven官方網(wǎng)站下載Maven,并按照官方文檔的指引進(jìn)行安裝和配置。配置完成后,確保你可以在命令行中使用mvn命令。

下載地址:

Maven官方網(wǎng)站:https://maven.apache.org/download.cgi

安裝方式:

  1. 下載適用于你的操作系統(tǒng)的Maven二進(jìn)制發(fā)行版(ZIP或tar.gz格式)。
  2. 解壓下載的文件到你選擇的目錄。
  3. 配置MAVEN_HOME環(huán)境變量:
    • Windows:在系統(tǒng)變量中新建一個(gè)名為MAVEN_HOME的變量,值為Maven的安裝路徑(例如:C:\apache-maven-3.8.3)。
    • macOS/Linux:在終端中編輯~/.bashrc或~/.bash_profile文件,并添加以下行:export MAVEN_HOME=/path/to/maven。然后運(yùn)行source ~/.bashrcsource ~/.bash_profile命令使配置生效。
  4. 將Maven的bin目錄添加到系統(tǒng)的PATH環(huán)境變量中。

操作示例:

  1. 打開命令行終端。
  2. 執(zhí)行以下命令驗(yàn)證Maven安裝是否成功:
mvn -v
  1. 如果成功安裝,會(huì)顯示Maven版本信息。

3.安裝和配置Git

工具介紹:

Git是一款分布式版本控制系統(tǒng),常用于協(xié)作開發(fā)和代碼管理。你可以從Git官方網(wǎng)站下載并安裝Git客戶端。安裝完成后,通過命令行驗(yàn)證Git是否正確安裝,并設(shè)置你的用戶名和郵箱。

下載地址:

Git官方網(wǎng)站:https://git-scm.com/downloads

安裝方式:

  1. 下載適用于你的操作系統(tǒng)的Git安裝程序。
  2. 運(yùn)行安裝程序并按照安裝向?qū)У闹敢M(jìn)行安裝。
  3. 在安裝過程中選擇合適的選項(xiàng),例如選擇安裝位置和默認(rèn)編輯器。

操作示例:

  1. 打開命令行終端。
  2. 配置用戶名和郵箱:
git config --global user.name "Your Name"git config --global user.email "your.email@example.com"
  1. 執(zhí)行以下命令驗(yàn)證Git安裝是否成功:
git --version
  1. 如果成功安裝,會(huì)顯示Git版本信息。

4.安裝集成開發(fā)環(huán)境(IDE)

工具介紹:

推薦使用IntelliJ IDEA作為開發(fā)微服務(wù)的集成開發(fā)環(huán)境,IntelliJ IDEA是一款強(qiáng)大的Java集成開發(fā)環(huán)境,提供了豐富的功能和工具來開發(fā)Java應(yīng)用程序。你可以從JetBrains官方網(wǎng)站下載并安裝IntelliJ IDEA的社區(qū)版或旗艦版,一般社區(qū)版能滿足基本的開發(fā)需要。安裝完成后,打開IntelliJ IDEA,并根據(jù)需要進(jìn)行相應(yīng)的配置,例如選擇主題、安裝必要的插件等。

下載地址:

IntelliJ IDEA官方網(wǎng)站:https://www.jetbrains.com/idea/download/

安裝方式:

  1. 下載適用于你的操作系統(tǒng)的IntelliJ IDEA安裝程序。
  2. 運(yùn)行安裝程序并按照安裝向?qū)У闹敢M(jìn)行安裝。
  3. 在安裝過程中選擇合適的選項(xiàng),例如選擇安裝位置、啟動(dòng)器圖標(biāo)等。

操作示例:

  1. 打開安裝后的IntelliJ IDEA。
  2. 配置IntelliJ IDEA的插件和主題等個(gè)性化設(shè)置。

5.創(chuàng)建項(xiàng)目和配置構(gòu)建工具

  1. 打開IntelliJ IDEA。

  2. 在歡迎界面中選擇"Create New Project"或點(diǎn)擊菜單欄的"File" -> "New" -> "Project"。

  3. 使用 Spring Initializr 快速生成項(xiàng)目結(jié)構(gòu),

    輸入名稱,存儲位置,jdk等信息,點(diǎn)擊下一步

    選擇spring boot版本,選擇所需依賴,點(diǎn)擊創(chuàng)建

    項(xiàng)目創(chuàng)建后,可以在pom.xml文件里繼續(xù)配置依賴和構(gòu)件項(xiàng)。

    pom.xml示例如下:

            org.springframework.boot        spring-boot-starter-data-jpa                org.springframework.boot        spring-boot-starter-web        2.7.11                com.h2database        h2        runtime                org.projectlombok        lombok        true                org.springframework.boot        spring-boot-starter-test        test                            org.springframework.cloud            spring-cloud-dependencies            ${spring-cloud.version}            pom            import                            com.alibaba.cloud            spring-cloud-alibaba-dependencies            2021.1            pom            import                ${project.artifactId}                        org.apache.maven.plugins            maven-resources-plugin            3.0.1                            UTF-8                                                            attach-sources                                                                org.apache.maven.plugins            maven-surefire-plugin            3.0.0-M5                            methods                10                -Dfile.encoding=UTF-8                true                                        org.apache.maven.plugins            maven-assembly-plugin            3.3.0                                                jar-with-dependencies                                                                            make-assembly                    package                                            single                                                                                    org.springframework.boot            spring-boot-maven-plugin                                                                        repackage                                                                            true                -Dfile.encoding=UTF-8                true                exec                        

以上是安裝和配置Java、Maven、Git和IntelliJ IDEA的詳細(xì)步驟。

請按照這些步驟進(jìn)行操作,確保這些工具在你的開發(fā)環(huán)境中正確安裝和配置。

接下來我們就可以繼續(xù)進(jìn)行下一步,開始搭建Java微服務(wù)框架。

4、定義微服務(wù)接口和協(xié)議

在設(shè)計(jì)微服務(wù)框架時(shí),定義微服務(wù)接口和協(xié)議是非常重要的一步。

接下來以學(xué)生信息為例,結(jié)合JPA(Java Persistence API),提供相關(guān)的增刪改查的代碼示例。

JPA(Java Persistence API)是Java EE的一部分,是一種用于對象持久化的規(guī)范。

它提供了一種以面向?qū)ο蟮姆绞竭M(jìn)行數(shù)據(jù)庫操作的方式,通過簡化數(shù)據(jù)庫訪問和數(shù)據(jù)對象之間的映射,提高了開發(fā)效率。

JPA使用注解來描述實(shí)體類和數(shù)據(jù)庫表之間的映射關(guān)系,可以輕松地進(jìn)行增刪改查等常見數(shù)據(jù)庫操作。它支持各種關(guān)系型數(shù)據(jù)庫,并提供了事務(wù)管理、緩存等功能。

在我們的示例中,我們使用JPA來定義學(xué)生實(shí)體類,并通過注解來映射學(xué)生信息表的結(jié)構(gòu)。這樣,我們可以通過簡單的代碼操作來實(shí)現(xiàn)對學(xué)生信息的持久化和查詢。

1.引入JPA依賴

在開始之前,我們需要在項(xiàng)目的pom.xml文件中添加JPA的依賴。JPA是Java Persistence API的縮寫,它是Java EE中持久化操作的標(biāo)準(zhǔn)規(guī)范,用于簡化數(shù)據(jù)庫操作和實(shí)體對象的映射關(guān)系。

請?jiān)陧?xiàng)目的pom.xml文件中添加以下依賴:

                javax.persistence        javax.persistence-api        2.2                    org.hibernate        hibernate-core        5.6.0.Final                    com.h2database        h2        1.4.200                        org.springframework.boot        spring-boot-starter-data-jpa        

這些依賴將啟用JPA和Hibernate作為我們的持久化框架,并使用H2數(shù)據(jù)庫作為示例數(shù)據(jù)庫。你可以根據(jù)自己的需求替換為其他數(shù)據(jù)庫。

2.示例表結(jié)構(gòu)

在我們的示例中,我們將使用一個(gè)名為"student"的表來存儲學(xué)生信息。該表包含三個(gè)列:id(主鍵),name和age。

請確保在你的數(shù)據(jù)庫中創(chuàng)建了名為"student"的表,以及相應(yīng)的列。以下是表的DDL示例:

CREATE TABLE student (  id INT PRIMARY KEY,  name VARCHAR(50),  age INT);

3.application.yml配置

在項(xiàng)目中,我們需要配置application.yml文件來連接數(shù)據(jù)庫和配置JPA。

請?jiān)趕rc/main/resources目錄下創(chuàng)建一個(gè)名為application.yml的文件,并添加以下內(nèi)容:

server:  port: 8180  servlet:    context-path: /spring:  application:    name: students-service  datasource:    url: jdbc:h2:mem:test    username: sa    password: password    driver-class-name: org.h2.Driver  jpa:    hibernate:      ddl-auto: create    show-sql: true

以上配置使用了H2內(nèi)存數(shù)據(jù)庫,并使用了默認(rèn)的sa用戶和password密碼進(jìn)行連接。同時(shí),我們啟用了Hibernate的DDL自動(dòng)更新功能,并配置JPA顯示SQL語句。

4.定義學(xué)生實(shí)體類

首先,定義一個(gè)學(xué)生實(shí)體類,用于表示學(xué)生的信息。可以包含學(xué)生的ID、姓名、年齡等屬性。

import lombok.Data;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;@Entity@Datapublic class Student {    @Id    @GeneratedValue(strategy = GenerationType.AUTO)    private Long id;    private String name;    private int age;}

5.定義學(xué)生信息的持久化接口

使用JPA來管理學(xué)生信息的持久化操作。定義一個(gè)學(xué)生信息的持久化接口,提供增刪改查等方法。

import org.springframework.data.jpa.repository.JpaRepository;public interface StudentRepository extends JpaRepository {    // 可以添加自定義的查詢方法,如根據(jù)姓名查詢學(xué)生信息等}

6.定義學(xué)生信息的控制器接口

在微服務(wù)框架中,通過HTTP協(xié)議暴露學(xué)生信息的API接口供外部調(diào)用。定義一個(gè)學(xué)生信息的控制器接口,提供增刪改查等API方法。

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.*;import java.util.List;@RestController@RequestMapping("/students")public class StudentController {    @Autowired    private StudentRepository studentRepository;    @GetMapping    public List getAllStudents() {        return studentRepository.findAll();    }    @PostMapping    public Student createStudent(@RequestBody Student student) {        return studentRepository.save(student);    }    @GetMapping("/{id}")    public Student getStudentById(@PathVariable("id") Long id) {        return studentRepository.findById(id).orElse(null);    }    @PutMapping("/{id}")    public Student updateStudent(@PathVariable("id") Long id, @RequestBody Student updatedStudent) {        Student existingStudent = studentRepository.findById(id).orElse(null);        if (existingStudent != null) {            existingStudent.setName(updatedStudent.getName());            existingStudent.setAge(updatedStudent.getAge());            return studentRepository.save(existingStudent);        }        return null;    }    @DeleteMapping("/{id}")    public void deleteStudent(@PathVariable("id") Long id) {        studentRepository.deleteById(id);    }}

通過以上代碼示例,我們定義了一個(gè)學(xué)生信息的實(shí)體類、學(xué)生信息的持久化接口和學(xué)生信息的控制器接口。

這樣就可以通過API來進(jìn)行學(xué)生信息的增刪改查操作。

在接下來的步驟中,我們將結(jié)合Spring Cloud、Nacos、Spring Cloud Gateway、Feign、Docker和Jenkins等組件,搭建一個(gè)完整的Java微服務(wù)框架。

5、實(shí)現(xiàn)服務(wù)注冊與發(fā)現(xiàn)

服務(wù)注冊與發(fā)現(xiàn)是微服務(wù)架構(gòu)中非常重要的一部分,它允許我們動(dòng)態(tài)地注冊和發(fā)現(xiàn)微服務(wù)實(shí)例,從而實(shí)現(xiàn)微服務(wù)之間的通信。在這一節(jié)中,我們將詳細(xì)介紹服務(wù)注冊與發(fā)現(xiàn)的工作原理和實(shí)現(xiàn)方式。

  1. 服務(wù)注冊

服務(wù)注冊是指將微服務(wù)實(shí)例的信息(例如主機(jī)名、端口號、服務(wù)名稱等)注冊到服務(wù)注冊中心,使得其他服務(wù)可以發(fā)現(xiàn)和調(diào)用它。下面是服務(wù)注冊的步驟:

  • 微服務(wù)啟動(dòng)時(shí),它會(huì)向服務(wù)注冊中心發(fā)送注冊請求,提供自己的信息。
  • 服務(wù)注冊中心收到注冊請求后,將微服務(wù)的信息保存起來,并為其生成一個(gè)唯一的標(biāo)識符(例如服務(wù)ID)。
  • 其他微服務(wù)可以通過服務(wù)注冊中心查詢和獲取已注冊的微服務(wù)實(shí)例列表。
  1. 服務(wù)發(fā)現(xiàn)

服務(wù)發(fā)現(xiàn)是指在需要調(diào)用其他微服務(wù)時(shí),通過服務(wù)注冊中心來獲取可用的微服務(wù)實(shí)例信息。下面是服務(wù)發(fā)現(xiàn)的步驟:

  • 微服務(wù)需要調(diào)用其他服務(wù)時(shí),它向服務(wù)注冊中心發(fā)送發(fā)現(xiàn)請求,指定需要調(diào)用的服務(wù)名稱。
  • 服務(wù)注冊中心根據(jù)服務(wù)名稱查詢已注冊的微服務(wù)實(shí)例列表,并返回給調(diào)用方。
  • 調(diào)用方根據(jù)負(fù)載均衡策略選擇一個(gè)可用的微服務(wù)實(shí)例進(jìn)行調(diào)用。
  1. 實(shí)現(xiàn)方式

服務(wù)注冊與發(fā)現(xiàn)可以采用不同的實(shí)現(xiàn)方式,常見的有以下幾種:

  • 基于服務(wù)注冊中心的實(shí)現(xiàn):使用獨(dú)立的服務(wù)注冊中心,例如Netflix Eureka、Consul或Nacos。微服務(wù)在啟動(dòng)時(shí)將自己注冊到注冊中心,其他微服務(wù)可以通過查詢注冊中心獲取可用的微服務(wù)實(shí)例信息。
  • 基于DNS的實(shí)現(xiàn):每個(gè)微服務(wù)使用自己的主機(jī)名和端口號,其他微服務(wù)通過域名解析來發(fā)現(xiàn)和調(diào)用它們。這種方式通常用于較小規(guī)模的微服務(wù)架構(gòu)。
  • 基于邊車代理的實(shí)現(xiàn):使用邊車代理(例如Zuul或Spring Cloud Gateway)來代理所有的微服務(wù)請求,并在代理層進(jìn)行服務(wù)發(fā)現(xiàn)和負(fù)載均衡。

在實(shí)現(xiàn)服務(wù)注冊與發(fā)現(xiàn)時(shí),我們通常會(huì)使用專門的框架和工具來簡化開發(fā)和管理。例如,結(jié)合Spring Cloud框架和Nacos注冊中心,我們可以通過使用@EnableDiscoveryClient注解啟用服務(wù)注冊與發(fā)現(xiàn)功能,并通過配置中心來配置服務(wù)注冊中心的地址。然后,我們可以通過注入DiscoveryClient來獲取已注冊的微服務(wù)實(shí)例列表,并根據(jù)需要進(jìn)行調(diào)用。

通過服務(wù)注冊與發(fā)現(xiàn),我們可以實(shí)現(xiàn)微服務(wù)架構(gòu)的彈性、可擴(kuò)展和高可用性,使得微服務(wù)之間的通信更加靈活和可靠。

接下來,我們將使用Nacos作為服務(wù)注冊與發(fā)現(xiàn)的中間件,并進(jìn)行安裝和配置。

Nacos(Naming and Configuration Service)是一個(gè)開源的服務(wù)注冊與發(fā)現(xiàn)中間件,由阿里巴巴集團(tuán)開發(fā)和維護(hù)。它提供了服務(wù)注冊、發(fā)現(xiàn)、配置管理和動(dòng)態(tài)配置更新的功能,可以幫助我們構(gòu)建彈性可伸縮的微服務(wù)架構(gòu)。

Nacos支持主流的服務(wù)注冊和發(fā)現(xiàn)協(xié)議,如Eureka、Consul和Nacos自身的服務(wù)注冊協(xié)議。它還提供了靈活的配置管理功能,支持動(dòng)態(tài)配置刷新,可以幫助我們實(shí)現(xiàn)微服務(wù)的配置中心。

1.安裝和配置Nacos

首先,我們需要安裝Nacos Server。請按照以下步驟進(jìn)行操作:

步驟 1:下載Nacos Server

你可以從Nacos的官方GitHub倉庫下載最新版本的Nacos Server。

下載地址:https://github.com/alibaba/nacos/releases

步驟 2:解壓Nacos Server

將下載的Nacos壓縮文件解壓到你選擇的目錄中。

步驟 3:啟動(dòng)Nacos Server

進(jìn)入解壓后的Nacos目錄,執(zhí)行以下命令啟動(dòng)Nacos Server:

PS D:\program\nacos\bin> .\startup.cmd -m standalone"nacos is starting with standalone"         ,--.       ,--."|   ,--,:  : |                                           Nacos 2.2.2,`--."`|  " :                       ,---.               Running in stand alone mode, All function modules|   :  :  | |                      "   ,"\   .--.--.    Port: 8848:   |   \ | :  ,--.--.     ,---.  /   /   | /  /    "   Pid: 16948|   : "  "; | /       \   /     \.   ; ,. :|  :  /`./   Console: http://10.23.48.43:8848/nacos/index.html"   " ;.    ;.--.  .-. | /    / ""   | |: :|  :  ;_|   | | \   | \__\/: . ..    " / "   | .; : \  \    `.      https://nacos.io"   : |  ; ." ," .--.; |"   ; :__|   :    |  `----.   \|   | "`--"  /  /  ,.  |"   | "."|\   \  /  /  /`--"  /"   : |     ;  :   ."   \   :    : `----"  "--".     /;   |."     |  ,     .-./\   \  /            `--"---""---"        `--`---"     `----"2023-05-17 11:20:55,045 INFO Tomcat initialized with port(s): 8848 (http)

Nacos Server將在默認(rèn)端口(8848)啟動(dòng),并以單機(jī)模式運(yùn)行。

步驟 4:訪問Nacos控制臺

在瀏覽器中訪問以下地址,進(jìn)入Nacos控制臺:

http://10.23.48.43:8848/nacos

2.引入Nacos相關(guān)依賴

在開始之前,我們需要在項(xiàng)目的pom.xml文件中添加Nacos相關(guān)依賴。請?zhí)砑右韵乱蕾嚕?/p>

xmlCopy code                        com.alibaba.cloud            spring-cloud-starter-alibaba-nacos-discovery            2021.1                                    org.springframework.cloud            spring-cloud-starter-bootstrap                

以上依賴將引入Nacos服務(wù)注冊與發(fā)現(xiàn)的功能。

3.系統(tǒng)配置變更

現(xiàn)在,我們需要進(jìn)行一些系統(tǒng)配置變更,以便我們的微服務(wù)可以與Nacos進(jìn)行交互。請?jiān)赽ootstrap.yml文件中添加以下配置:

spring:  cloud:    nacos:      discovery:        server-addr: 10.23.48.43:8848

以上配置指定了Nacos Server的地址和端口。

4.示例代碼

接下來,我們將編寫示例代碼,實(shí)現(xiàn)服務(wù)注冊與發(fā)現(xiàn)的功能。請?zhí)砑右韵麓a到Spring Boot應(yīng)用程序中的啟動(dòng)類上方:

import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@EnableDiscoveryClient@SpringBootApplicationpublic class StudentsServiceApplication {    public static void main(String[] args) {        SpringApplication.run(StudentsServiceApplication.class, args);    }}

在以上代碼中,我們使用了@EnableDiscoveryClient注解來啟用服務(wù)注冊與發(fā)現(xiàn)功能。

現(xiàn)在,你的微服務(wù)將能夠與Nacos進(jìn)行通信,實(shí)現(xiàn)服務(wù)的注冊和發(fā)現(xiàn)。

在接下來的步驟中,我們將繼續(xù)編寫代碼來實(shí)現(xiàn)其他功能,如服務(wù)網(wǎng)關(guān)、服務(wù)間通信等。

6、實(shí)現(xiàn)服務(wù)調(diào)用和負(fù)載均衡

在微服務(wù)架構(gòu)中,服務(wù)之間的調(diào)用是非常常見的場景。為了簡化服務(wù)調(diào)用的過程并實(shí)現(xiàn)負(fù)載均衡,我們可以使用Feign與Nacos結(jié)合來實(shí)現(xiàn)。本節(jié)將詳細(xì)介紹服務(wù)調(diào)用的概念以及如何使用Feign與Nacos來實(shí)現(xiàn)服務(wù)調(diào)用和負(fù)載均衡。

  1. 服務(wù)調(diào)用的概念

服務(wù)調(diào)用是指一個(gè)微服務(wù)向另一個(gè)微服務(wù)發(fā)起請求,獲取所需的數(shù)據(jù)或執(zhí)行特定的操作。在微服務(wù)架構(gòu)中,服務(wù)調(diào)用可以跨越多個(gè)微服務(wù)實(shí)例,因此需要一種機(jī)制來管理和處理服務(wù)之間的通信。

  1. 使用Feign與Nacos實(shí)現(xiàn)服務(wù)調(diào)用和負(fù)載均衡
  • Feign是一個(gè)聲明式的Web服務(wù)客戶端,它可以與多種服務(wù)注冊中心集成,包括Nacos。通過使用Feign,我們可以通過簡單的接口定義來調(diào)用其他微服務(wù),并且不需要手動(dòng)編寫具體的HTTP請求代碼。

  • Nacos作為服務(wù)注冊中心,提供了服務(wù)發(fā)現(xiàn)和負(fù)載均衡的功能。它可以自動(dòng)維護(hù)微服務(wù)實(shí)例列表,并根據(jù)負(fù)載均衡策略選擇合適的實(shí)例進(jìn)行調(diào)用。

下面是使用Feign與Nacos結(jié)合實(shí)現(xiàn)服務(wù)調(diào)用和負(fù)載均衡的步驟:

  • 步驟 1: 引入依賴

在項(xiàng)目的pom.xml文件中添加Feign相關(guān)的依賴:

                org.springframework.cloud        spring-cloud-starter-openfeign                org.springframework.cloud        spring-cloud-starter-loadbalancer              
  • 步驟 2: 啟用Feign客戶端

在啟動(dòng)類上添加@EnableFeignClients注解,啟用Feign客戶端:

import org.springframework.cloud.openfeign.EnableFeignClients;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@EnableDiscoveryClient@EnableFeignClients@SpringBootApplicationpublic class StudentsServiceApplication {    public static void main(String[] args) {        SpringApplication.run(StudentsServiceApplication.class, args);    }}
  • 步驟 3: 創(chuàng)建Feign客戶端接口

創(chuàng)建一個(gè)Feign客戶端接口,使用@FeignClient注解指定要調(diào)用的微服務(wù)名稱和相關(guān)配置:

import org.springframework.cloud.openfeign.FeignClient;import org.springframework.web.bind.annotation.GetMapping;@FeignClient(name = "students-service")public interface StudentFeignClient {    @GetMapping("/students/{id}")    Student getStudentById(@PathVariable("id") Long id);}
  • 步驟 4: 使用Feign客戶端進(jìn)行服務(wù)調(diào)用

通過注入Feign客戶端接口,并調(diào)用相應(yīng)的方法來進(jìn)行服務(wù)調(diào)用:

import com.crazymaker.students.entity.Student;import com.crazymaker.students.feign.StudentFeignClient;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Servicepublic class StudentService {    private StudentFeignClient feignClient;    @Autowired    public StudentService(StudentFeignClient feignClient) {        this.feignClient = feignClient;    }    public Student getStudentById(Long id) {        return feignClient.getStudentById(id);    }}

在上面的示例中,通過serviceClient.getStudentById()來調(diào)用目標(biāo)微服務(wù)的接口。

通過以上步驟,我們可以使用Feign與Nacos結(jié)合來實(shí)現(xiàn)服務(wù)調(diào)用和負(fù)載均衡。Feign將負(fù)責(zé)處理底層的HTTP通信細(xì)節(jié),而Nacos將負(fù)責(zé)維護(hù)微服務(wù)實(shí)例列表和選擇合適的實(shí)例進(jìn)行調(diào)用,從而實(shí)現(xiàn)了服務(wù)調(diào)用和負(fù)載均衡的功能。

7、實(shí)現(xiàn)服務(wù)監(jiān)控和日志管理

服務(wù)監(jiān)控是指對微服務(wù)架構(gòu)中的各個(gè)服務(wù)進(jìn)行實(shí)時(shí)監(jiān)控和管理,以確保系統(tǒng)的穩(wěn)定性和可靠性。通過監(jiān)控服務(wù)的運(yùn)行狀態(tài)、性能指標(biāo)和異常情況,可以及時(shí)發(fā)現(xiàn)問題并采取相應(yīng)措施,以提高系統(tǒng)的可用性和響應(yīng)能力。

日志管理是指對微服務(wù)架構(gòu)中生成的日志進(jìn)行收集、存儲、分析和展示的過程。日志是系統(tǒng)運(yùn)行的重要記錄,通過對日志進(jìn)行管理和分析,可以了解系統(tǒng)的運(yùn)行狀況、故障信息和異常情況,以便于問題排查和系統(tǒng)優(yōu)化。

服務(wù)監(jiān)控和日志管理對于微服務(wù)架構(gòu)具有重要的必要性和優(yōu)勢:

  • 實(shí)時(shí)監(jiān)控和管理:通過服務(wù)監(jiān)控,可以實(shí)時(shí)監(jiān)測服務(wù)的運(yùn)行狀態(tài)、性能指標(biāo)和異常情況,及時(shí)發(fā)現(xiàn)問題并采取措施,保證系統(tǒng)的穩(wěn)定性和可靠性。
  • 故障排查和問題定位:通過日志管理,可以收集和分析系統(tǒng)生成的日志信息,幫助快速定位問題、排查故障,提高故障處理的效率。
  • 性能優(yōu)化和系統(tǒng)優(yōu)化:通過監(jiān)控和分析服務(wù)的性能指標(biāo),可以發(fā)現(xiàn)性能瓶頸和優(yōu)化空間,以提升系統(tǒng)的性能和響應(yīng)能力。
  • 數(shù)據(jù)分析和業(yè)務(wù)洞察:通過對日志進(jìn)行分析和挖掘,可以獲得有價(jià)值的業(yè)務(wù)洞察,幫助優(yōu)化業(yè)務(wù)流程和決策制定。

下面我們通過分別搭建和配置Spring Boot Admin 和 ELK 服務(wù)來實(shí)現(xiàn)性能監(jiān)控和日志管理:

1.Spring Boot Admin 服務(wù)監(jiān)控

Spring Boot Admin是一個(gè)開源的服務(wù)監(jiān)控和管理工具,它提供了一個(gè)Web界面,用于監(jiān)控和管理基于Spring Boot的應(yīng)用程序。通過Spring Boot Admin,可以實(shí)時(shí)監(jiān)控和管理應(yīng)用程序的運(yùn)行狀態(tài)、健康狀況、性能指標(biāo)等,并提供了強(qiáng)大的可視化和告警功能。

安裝和配置Spring Boot Admin的步驟如下:

  1. 按上文步驟新建一個(gè)Spring Boot項(xiàng)目, 添加Spring Boot Admin的依賴

    • 在Spring Boot應(yīng)用程序的pom.xml文件中添加Spring Boot Admin的依賴:
    de.codecentric    spring-boot-admin-starter-server    3.0.3
  1. 配置bootstrap.ymlapplication.yml文件
spring:  cloud:    nacos:      discovery:        server-addr: 10.23.48.43:8848
server:  port: 8181  servlet:    context-path: /spring:  application:    name: admin-service
  1. 啟動(dòng)Spring Boot Admin Server
@EnableDiscoveryClient@SpringBootApplication@EnableAdminServerpublic class AdminServiceApplication {    public static void main(String[] args) {        SpringApplication.run(AdminServiceApplication.class, args);    }}

啟動(dòng)應(yīng)用程序, 點(diǎn)擊 http://10.23.48.43:8181/applications 訪問監(jiān)控頁面

  1. 微服務(wù)項(xiàng)目配置Spring Boot Admin

1)pom.xml 里添加admin依賴

    de.codecentric    spring-boot-admin-starter-server    3.0.3    org.springframework.boot    spring-boot-starter-actuator

2)在Spring Boot應(yīng)用程序的配置文件(如application.yml)中,配置Spring Boot Admin Server的相關(guān)信息:

spring:  boot:    admin:      client:        url: http://10.23.48.43:8181 # Spring Boot Admin Server的地址   management:  endpoints:    web:      exposure:        include: "*"  endpoint:    health:      show-details: ALWAYS        
  1. 重新啟動(dòng)應(yīng)用程序

重新啟動(dòng)應(yīng)用程序, 它將自動(dòng)注冊到Spring Boot Admin Server。

通過以上配置,我們可以實(shí)現(xiàn)Spring Boot Admin與Nacos的結(jié)合,使得應(yīng)用程序能夠通過Spring Boot Admin進(jìn)行監(jiān)控和管理。

2.ELK 日志監(jiān)控

ELK是一個(gè)流行的日志管理和分析解決方案,由Elasticsearch、Logstash和Kibana三個(gè)項(xiàng)目組成,常用于日志收集和分析。

日志主要包括系統(tǒng)日志、應(yīng)用程序日志和安全日志。運(yùn)維和開發(fā)人員可以通過日志了解服務(wù)器運(yùn)行過程中發(fā)生的錯(cuò)誤及錯(cuò)誤產(chǎn)生的原因。定期分析日志可以了解服務(wù)器的運(yùn)行情況、性能、安全性等。

每臺服務(wù)器或應(yīng)用程序都會(huì)產(chǎn)生日志,如果每次都登錄這些服務(wù)器查看日志并分析會(huì)耗費(fèi)大量時(shí)間,而且效率低下,這時(shí)我們就需要思考如何將日志匯總起來統(tǒng)一查看。日志集中管理之后又會(huì)產(chǎn)生新的問題,日志量太大,日志統(tǒng)計(jì)和檢索又成為新的問題,如何能實(shí)現(xiàn)高性能的檢索統(tǒng)計(jì)呢?ELK能完美解決我們的問題。

  • Elasticsearch是個(gè)開源分布式搜索引擎,它的特點(diǎn)有:分布式,零配置,自動(dòng)發(fā)現(xiàn),索引自動(dòng)分片,索引副本機(jī)制,restful風(fēng)格接口,多數(shù)據(jù)源,自動(dòng)搜索負(fù)載等。
  • Logstash是一個(gè)完全開源的工具,他可以對你的日志進(jìn)行收集、分析,并將其存儲供以后使用。
  • kibana 也是一個(gè)開源和免費(fèi)的工具,它可以為 Logstash 和 Elasticsearch 提供的日志分析友好的 Web 界面,可以匯總、分析和搜索重要數(shù)據(jù)日志。

關(guān)于ELK的原理和實(shí)操,強(qiáng)烈推薦:

ELK日志平臺(elasticsearch +logstash+kibana)原理和實(shí)操(史上最全):

https://www.cnblogs.com/crazymakercircle/p/16732034.html

ELK安裝

本文這里為了方便演示,僅演示利用docker容器在本機(jī)部署ELK,在實(shí)際生產(chǎn)環(huán)境下,推薦使用多臺linux服務(wù)器,安裝ELK集群。

首先新建elk目錄,在目錄下新建相關(guān)文件夾:

docker-compose.yml內(nèi)容如下:

version: "3.2"services:    elasticsearch:        image: elasticsearch:7.17.4        volumes:            - ./es/plugins:/usr/share/elasticsearch/plugins #插件文件掛載            - ./es/data:/usr/share/elasticsearch/data #數(shù)據(jù)文件掛載            - ./es/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml #配置        ports:            - "9200:9200"            - "9300:9300"        container_name: elasticsearch        environment:            - "cluster.name=elasticsearch" #設(shè)置集群名稱為elasticsearch            - "discovery.type=single-node" #以單一節(jié)點(diǎn)模式啟動(dòng)            - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m" #設(shè)置使用jvm內(nèi)存大小        networks:            - elk    logstash:        image: logstash:7.17.4        container_name: logstash        volumes:            - "./logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf"        ports:            - "5044:5044"            - "50000:50000/tcp"            - "50000:5000/udp"            - "9600:9600"        environment:            LS_JAVA_OPTS: -Xms1024m -Xmx1024m            TZ: Asia/Shanghai            MONITORING_ENABLED: false        links:            - elasticsearch:es #可以用es這個(gè)域名訪問elasticsearch服務(wù)        networks:            - elk        depends_on:            - elasticsearch    kibana:        image: kibana:7.17.4        container_name: kibana        volumes:            - ./kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml        ports:            - "5601:5601"        links:            - elasticsearch:es #可以用es這個(gè)域名訪問elasticsearch服務(wù)        environment:            - ELASTICSEARCH_URL=http://elasticsearch:9200 #設(shè)置訪問elasticsearch的地址            - "elasticsearch.hosts=http://es:9200" #設(shè)置訪問elasticsearch的地址            - I18N_LOCALE=zh-CN        networks:            - elk        depends_on:            - elasticsearchnetworks:    elk:        name: elk        driver:            bridge           

在es目錄下新建 data、plugins 文件夾, 以及elasticsearch.yml文件,內(nèi)容如下:

cluster.name: elasticsearch # 集群名稱node.name: node-1 # 節(jié)點(diǎn)名稱network.host: 0.0.0.0 # 監(jiān)聽地址http.port: 9200 # 監(jiān)聽端口http.cors.enabled: truehttp.cors.allow-origin: "*"

在logstash目錄下新建logstash.conf文件, 內(nèi)容如下:

input {  tcp {    port => 5000    codec => json  }}filter {  # 進(jìn)行過濾和轉(zhuǎn)換規(guī)則的配置}output {  elasticsearch {    hosts => ["es:9200"] # Elasticsearch的地址    index => "my-application-%{+YYYY.MM.dd}" # 索引名稱,可按日期劃分  }}

在kibana目錄下,創(chuàng)建config文件夾,并新建kibana.yml文件,內(nèi)容如下:

# Default Kibana configuration for docker targetserver.host: "0.0.0.0"server.shutdownTimeout: "5s"elasticsearch.hosts: ["http://elasticsearch:9200"]monitoring.ui.container.elasticsearch.enabled: trueserver.port: 5601 # 監(jiān)聽端口

啟動(dòng):

docker-compose -f docker-compose.yml up -d

微服務(wù)應(yīng)用接入

  • 在應(yīng)用系統(tǒng)中,將日志輸出到Logstash的監(jiān)聽端口。以下是一個(gè)Logback配置的示例logback-spring.xml
            10.23.48.43:5000                            
  • 引入logstash依賴
    net.logstash.logback    logstash-logback-encoder    7.2
  • 使用Kibana訪問Elasticsearch,配置索引模式、定義可視化儀表板和圖表等,以展示和分析日志數(shù)據(jù)。

通過以上步驟,我們可以搭建起ELK Stack,并將應(yīng)用系統(tǒng)接入到ELK Stack中進(jìn)行日志的收集、存儲、分析和可視化展示。這樣,我們可以方便地對日志進(jìn)行搜索、過濾、聚合和可視化,幫助我們快速定位問題、監(jiān)控系統(tǒng)的運(yùn)行狀況,并提供數(shù)據(jù)支持進(jìn)行性能優(yōu)化和故障排查。

通過結(jié)合這些開源中間件,我們可以實(shí)現(xiàn)對微服務(wù)的全面監(jiān)控和日志管理,幫助我們及時(shí)發(fā)現(xiàn)問題、優(yōu)化性能,并提供可視化的展示和分析工具,從而提升微服務(wù)架構(gòu)的可靠性和穩(wěn)定性。

8、保護(hù)服務(wù)安全

在微服務(wù)架構(gòu)中,服務(wù)安全保護(hù)是至關(guān)重要的,它們可以保護(hù)微服務(wù)免受未經(jīng)授權(quán)的訪問,并確保只有經(jīng)過身份驗(yàn)證和授權(quán)的用戶才能訪問受保護(hù)的資源。

Spring Cloud Gateway是一個(gè)基于Spring Framework 5、Project Reactor和Spring Boot 2構(gòu)建的輕量級網(wǎng)關(guān)服務(wù),用于構(gòu)建和管理微服務(wù)架構(gòu)中的API網(wǎng)關(guān)。

API網(wǎng)關(guān)在微服務(wù)架構(gòu)中安全方面扮演著重要的角色,它作為系統(tǒng)的入口,它可以提供以下安全功能:

  1. 訪問控制:API網(wǎng)關(guān)可以對傳入的請求進(jìn)行訪問控制,確保只有經(jīng)過身份驗(yàn)證和授權(quán)的用戶能夠訪問受保護(hù)的資源。它可以驗(yàn)證請求中的身份驗(yàn)證令牌或證書,并根據(jù)配置的權(quán)限規(guī)則進(jìn)行訪問控制。

  2. 安全認(rèn)證和授權(quán):API網(wǎng)關(guān)可以與認(rèn)證和授權(quán)中間件(如OAuth2)集成,實(shí)現(xiàn)對微服務(wù)的安全認(rèn)證和授權(quán)。它可以驗(yàn)證請求中的訪問令牌,并將認(rèn)證和授權(quán)信息傳遞給后端的微服務(wù),以確保只有具有足夠權(quán)限的用戶能夠訪問特定的資源。

  3. 保護(hù)后端服務(wù):API網(wǎng)關(guān)可以隱藏后端的微服務(wù)架構(gòu),只暴露必要的接口給外部客戶端,從而降低了被惡意攻擊的風(fēng)險(xiǎn)。它可以阻止未經(jīng)授權(quán)的請求直接訪問后端服務(wù),并提供請求的限流和緩沖功能,以保護(hù)后端服務(wù)免受過載或惡意攻擊。

  4. 安全審計(jì)和日志記錄:API網(wǎng)關(guān)可以記錄請求和響應(yīng)的詳細(xì)信息,包括訪問時(shí)間、來源IP、請求內(nèi)容等,以便進(jìn)行安全審計(jì)和故障排查。它可以將日志記錄到集中的日志管理系統(tǒng)中,方便監(jiān)控和分析。

  5. 攻擊防護(hù):API網(wǎng)關(guān)可以實(shí)施一些安全防護(hù)措施,如防止跨站腳本攻擊(XSS)、跨站請求偽造(CSRF)和注入攻擊等。它可以對傳入的請求進(jìn)行驗(yàn)證和過濾,以識別和阻止?jié)撛诘膼阂庑袨椤?/p>

綜上所述,API網(wǎng)關(guān)在安全方面具有重要的作用。它可以提供訪問控制、安全認(rèn)證和授權(quán)、保護(hù)后端服務(wù)、安全審計(jì)和日志記錄以及攻擊防護(hù)等功能,幫助確保微服務(wù)架構(gòu)的安全性和可靠性。

通過合理配置和使用適當(dāng)?shù)陌踩珯C(jī)制,API網(wǎng)關(guān)可以成為微服務(wù)架構(gòu)中的首道防線,保護(hù)系統(tǒng)免受潛在的安全威脅。

下面是搭建和配置Spring Cloud Gateway的步驟示例:

首先創(chuàng)建一個(gè)Spring Boot應(yīng)用, 在項(xiàng)目的pom.xml文件中添加相應(yīng)的依賴配置。

                org.springframework.cloud        spring-cloud-starter-gateway                    org.springframework.cloud        spring-cloud-starter-alibaba-nacos-discovery    

接下來,在application.yml文件中配置Spring Cloud Gateway和Nacos的相關(guān)信息。

# Spring Cloud Gateway配置server:  port: 8182spring:  cloud:    gateway:      discovery:        locator:          enabled: true          lower-case-service-id: true# Nacos配置spring:  cloud:    nacos:      discovery:        server-addr: ${nacos.server-addr} # Nacos Server地址# 網(wǎng)關(guān)路由配置spring:  cloud:    gateway:      routes:        - id: sample-service # 路由ID          uri: lb://student-service # 后端服務(wù)名          predicates:            - Path=/student/** # 匹配的路徑          filters:            - StripPrefix=1 # 去除前綴

以上配置中,需要將nacos.server-addr替換為實(shí)際的Nacos Server地址。

然后,創(chuàng)建一個(gè)啟動(dòng)類并添加@EnableDiscoveryClient注解,啟用服務(wù)發(fā)現(xiàn)功能。

import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication@EnableDiscoveryClientpublic class GatewayApplication {    public static void main(String[] args) {        SpringApplication.run(GatewayApplication.class, args);    }}

最后,通過配置路由規(guī)則,將請求轉(zhuǎn)發(fā)到后端的微服務(wù)??梢允褂?code>@Bean注解在配置類中定義路由規(guī)則,或者使用配置文件中的spring.cloud.gateway.routes屬性進(jìn)行配置。

import org.springframework.cloud.gateway.route.RouteLocator;import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class GatewayConfig {    @Bean    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {        return builder.routes()                .route("student-service", r -> r.path("/student/**")                        .uri("lb://student-service"))                .build();    }}

通過以上配置,Spring Cloud Gateway將根據(jù)路由規(guī)則將/sample/**路徑的請求轉(zhuǎn)發(fā)到名為sample-service的后端微服務(wù)。

請注意,示例中的sample-service是一個(gè)示意的后端微服務(wù)名稱,需要根據(jù)實(shí)際情況替換為真實(shí)的微服務(wù)名稱。

這樣,結(jié)合Spring Cloud Gateway和Nacos的示例就完成了。啟動(dòng)應(yīng)用后,它將根據(jù)配置的路由規(guī)則將請求轉(zhuǎn)發(fā)到相應(yīng)的后端微服務(wù),并通過Nacos進(jìn)行服務(wù)的注冊和發(fā)現(xiàn)。

Spring Cloud Gateway作為微服務(wù)架構(gòu)的入口,除了提供了路由轉(zhuǎn)發(fā),還提供了負(fù)載均衡、過濾器、安全認(rèn)證、請求限流和監(jiān)控等功能,

關(guān)于服務(wù)保護(hù),本圣經(jīng)后面有專欄介紹。當(dāng)然,有興趣的小伙伴可以閱讀

SpringCloud gateway (史上最全) - 瘋狂創(chuàng)客圈:https://www.cnblogs.com/crazymakercircle/p/11704077.html

進(jìn)一步學(xué)習(xí)和掌握相關(guān)知識。

9、實(shí)現(xiàn)持續(xù)集成和部署

持續(xù)集成(Continuous Integration)是一種軟件開發(fā)實(shí)踐,旨在頻繁地將代碼集成到主干版本控制系統(tǒng)中。持續(xù)部署(Continuous Deployment)是持續(xù)集成的延伸,自動(dòng)將通過持續(xù)集成構(gòu)建的可部署軟件包發(fā)布到生產(chǎn)環(huán)境。

以下是一種基本的實(shí)現(xiàn)方式:

  1. 版本控制:使用版本控制系統(tǒng)(如Git)管理代碼,確保團(tuán)隊(duì)成員可以協(xié)同開發(fā),并且每個(gè)更改都有明確的記錄。

  2. 自動(dòng)化構(gòu)建:使用構(gòu)建工具(如Maven)配置構(gòu)建腳本,定義項(xiàng)目的編譯、打包、測試等步驟。

  3. 持續(xù)集成服務(wù)器:使用持續(xù)集成服務(wù)器(如Jenkins)來觸發(fā)構(gòu)建,并執(zhí)行自動(dòng)化構(gòu)建過程。

  4. 自動(dòng)化測試:編寫并執(zhí)行自動(dòng)化測試腳本,包括單元測試、集成測試和端到端測試等,以確保代碼質(zhì)量和功能穩(wěn)定性。

  5. 自動(dòng)化部署:使用容器化技術(shù)(如Docker)打包應(yīng)用程序,并將其部署到預(yù)先定義的環(huán)境中,如開發(fā)環(huán)境、測試環(huán)境和生產(chǎn)環(huán)境。

接下來,我們將分別介紹Jenkins和Docker,然后提供詳細(xì)的配置步驟來實(shí)現(xiàn)持續(xù)集成和部署。

1.Jenkins

Jenkins是一個(gè)開源的持續(xù)集成工具,它提供了一系列功能和插件,用于自動(dòng)化構(gòu)建、測試和部署軟件。以下是Jenkins的基本概念和特點(diǎn):

  • 作業(yè)(Job):Jenkins中的最小單位,代表一個(gè)構(gòu)建或部署任務(wù)。
  • 構(gòu)建(Build):Jenkins執(zhí)行的一次構(gòu)建過程,包括編譯代碼、運(yùn)行測試、生成構(gòu)建報(bào)告等。
  • 插件(Plugin):Jenkins提供了豐富的插件生態(tài)系統(tǒng),用于擴(kuò)展其功能,例如集成不同的版本控制系統(tǒng)、構(gòu)建工具和部署平臺等。

2.Docker

Docker是一個(gè)開源的容器化平臺,它可以將應(yīng)用程序及其依賴項(xiàng)打包到容器中,提供了一致、可重復(fù)和可移植的部署環(huán)境。以下是Docker的基本概念和特點(diǎn):

  • 鏡像(Image):Docker容器的基礎(chǔ)組件,包含了一個(gè)完整的操作系統(tǒng)和應(yīng)用程序的運(yùn)行環(huán)境。
  • 容器(Container):基于鏡像創(chuàng)建的運(yùn)行實(shí)例,每個(gè)容器都是相互

隔離的,擁有自己的文件系統(tǒng)、進(jìn)程空間和網(wǎng)絡(luò)接口。

  • 倉庫(Repository):用于存儲和分享鏡像的中央注冊表,Docker Hub是最常用的公共倉庫

3.配置步驟

  1. 微服務(wù)應(yīng)用新增Dockerfile文件
FROM openjdk:8-jreRUN mkdir /appCOPY students-service-exec.jar /app/app.jarENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app/app.jar"]EXPOSE 8180
  1. 安裝和配置Jenkins:
  • 下載Jenkins:訪問Jenkins官方網(wǎng)站(Jenkins download and deployment)下載適合您操作系統(tǒng)的Jenkins安裝包。

  • 安裝Jenkins:按照官方文檔提供的步驟,安裝Jenkins并完成初始化配置。

  • 安裝插件:通過Jenkins的插件管理界面,安裝必要的插件,如Git插件、Maven插件、docker插件等。

    安裝過程可參考 https://zhuanlan.zhihu.com/p/566398364

  1. 配置Jenkins構(gòu)建任務(wù):
  • 創(chuàng)建新任務(wù):在Jenkins主界面,選擇"新建任務(wù)",輸入任務(wù)名稱,并選擇自由風(fēng)格的軟件項(xiàng)目。
  • 配置源代碼管理:在任務(wù)配置界面,選擇Git作為源代碼管理工具,提供代碼倉庫的URL和憑據(jù)。
  • 配置構(gòu)建步驟:在構(gòu)建步驟中,可以定義構(gòu)建腳本,如編譯代碼、運(yùn)行測試、打包構(gòu)建等。
  1. 安裝和配置Docker:
  • 安裝Docker:根據(jù)您的操作系統(tǒng),參考Docker官方文檔(https://docs.docker.com/get-docker/)進(jìn)行Docker的安裝。
  • 配置Docker構(gòu)建環(huán)境:在Jenkins任務(wù)配置界面,選擇"添加構(gòu)建步驟",選擇"Execute shell"或"Execute Windows batch command",然后在腳本中使用Docker命令構(gòu)建和發(fā)布鏡像。

構(gòu)建成功后,我們可以在docker桌面端看到students-service服務(wù)已啟動(dòng),

通過以上步驟,您可以使用Jenkins和Docker實(shí)現(xiàn)持續(xù)集成和部署。

Jenkins將根據(jù)配置的觸發(fā)器自動(dòng)執(zhí)行構(gòu)建任務(wù),通過Docker構(gòu)建和發(fā)布鏡像,實(shí)現(xiàn)持續(xù)集成和部署的流程。

您可以根據(jù)具體的項(xiàng)目需求和環(huán)境配置Jenkins任務(wù)和Docker構(gòu)建腳本,以實(shí)現(xiàn)自動(dòng)化的軟件交付流程。

10、小結(jié)

在本文中,我們首先討論了微服務(wù)框架的基本原則,然后通過安裝和配置Java、Maven、Git和IDEA等工具,為搭建基礎(chǔ)設(shè)施做好準(zhǔn)備。接著,我們定義了微服務(wù)接口和協(xié)議,并使用JPA提供了增刪改查的代碼示例。通過集成Nacos,我們實(shí)現(xiàn)了服務(wù)注冊與發(fā)現(xiàn),以及使用Feign實(shí)現(xiàn)服務(wù)調(diào)用和負(fù)載均衡。

我們還介紹了Spring Boot Admin和Elasticsearch,用于實(shí)現(xiàn)服務(wù)監(jiān)控和日志管理。最后,我們使用Spring Cloud Gateway實(shí)現(xiàn)了服務(wù)安全保護(hù),并通過Jenkins和Docker實(shí)現(xiàn)了持續(xù)集成和部署。

通過這個(gè)搭建過程,我們達(dá)到了構(gòu)建一個(gè)完整的Java微服務(wù)框架的目標(biāo)。

我們建立了基礎(chǔ)設(shè)施,定義了接口和協(xié)議,實(shí)現(xiàn)了服務(wù)注冊與發(fā)現(xiàn)、服務(wù)調(diào)用和負(fù)載均衡、服務(wù)監(jiān)控和日志管理、服務(wù)安全和認(rèn)證授權(quán),并實(shí)現(xiàn)了持續(xù)集成和部署。

搭建過程存在的不足和改進(jìn)的方向如下:

  1. 性能監(jiān)控和報(bào)警:在服務(wù)監(jiān)控和日志管理部分,我們可以進(jìn)一步改進(jìn),引入Prometheus和Grafana來實(shí)現(xiàn)更全面的性能監(jiān)控和報(bào)警功能。Prometheus是一個(gè)開源的監(jiān)控系統(tǒng),可以收集和存儲各種指標(biāo)數(shù)據(jù),并提供強(qiáng)大的查詢和報(bào)警功能。Grafana是一個(gè)數(shù)據(jù)可視化工具,可以將Prometheus收集的數(shù)據(jù)以圖表的形式展示出來,幫助我們更直觀地了解系統(tǒng)的性能狀況。通過使用Prometheus和Grafana,我們可以實(shí)時(shí)監(jiān)控系統(tǒng)的指標(biāo),并設(shè)置報(bào)警規(guī)則,及時(shí)發(fā)現(xiàn)并解決潛在的性能問題。

  2. 為了保障微服務(wù)系統(tǒng)的穩(wěn)定性和可靠性,你還需要考慮服務(wù)的熔斷、限流、降級等策略??梢允褂?Hystrix 或者 Resilience4j 等庫來實(shí)現(xiàn)這些功能。

  3. 容器化部署:在持續(xù)集成和部署部分,我們可以進(jìn)一步改進(jìn),引入Kubernetes(K8s)來實(shí)現(xiàn)容器化部署。Kubernetes是一個(gè)開源的容器編排平臺,可以簡化和自動(dòng)化應(yīng)用程序的部署、擴(kuò)展和管理。通過使用Kubernetes,我們可以將微服務(wù)框架中的各個(gè)服務(wù)容器化,并通過K8s進(jìn)行部署、伸縮和管理,提供更高效、可靠和彈性的部署方案。

  4. 自動(dòng)化和流程改進(jìn):在持續(xù)集成和部署部分,我們可以進(jìn)一步改進(jìn)和優(yōu)化自動(dòng)化流程。通過使用更先進(jìn)的CI/CD工具和技術(shù),如Jenkins Pipeline、GitOps等,可以實(shí)現(xiàn)更高度的自動(dòng)化和流程改進(jìn)。例如,可以通過編寫自動(dòng)化的流水線腳本,實(shí)現(xiàn)代碼的構(gòu)建、測試、打包和部署的自動(dòng)化,并與版本控制系統(tǒng)(如Git)進(jìn)行集成,實(shí)現(xiàn)代碼的自動(dòng)觸發(fā)和持續(xù)交付。

通過上述改進(jìn),我們可以進(jìn)一步提升微服務(wù)框架的性能監(jiān)控、報(bào)警能力,以及部署和管理的效率和可靠性。這將有助于更好地滿足不斷變化的業(yè)務(wù)需求,并提升系統(tǒng)的可靠性和穩(wěn)定性。

技術(shù)自由的實(shí)現(xiàn)路徑:

實(shí)現(xiàn)你的 架構(gòu)自由:

《吃透8圖1模板,人人可以做架構(gòu)》

《10Wqps評論中臺,如何架構(gòu)?B站是這么做的?。。 ?/p>

《阿里二面:千萬級、億級數(shù)據(jù),如何性能優(yōu)化? 教科書級 答案來了》

《峰值21WQps、億級DAU,小游戲《羊了個(gè)羊》是怎么架構(gòu)的?》

《100億級訂單怎么調(diào)度,來一個(gè)大廠的極品方案》

《2個(gè)大廠 100億級 超大流量 紅包 架構(gòu)方案》

… 更多架構(gòu)文章,正在添加中

實(shí)現(xiàn)你的 響應(yīng)式 自由:

《響應(yīng)式圣經(jīng):10W字,實(shí)現(xiàn)Spring響應(yīng)式編程自由》

這是老版本 《Flux、Mono、Reactor 實(shí)戰(zhàn)(史上最全)》

實(shí)現(xiàn)你的 spring cloud 自由:

《Spring cloud Alibaba 學(xué)習(xí)圣經(jīng)》 PDF

《分庫分表 Sharding-JDBC 底層原理、核心實(shí)戰(zhàn)(史上最全)》

《一文搞定:SpringBoot、SLF4j、Log4j、Logback、Netty之間混亂關(guān)系(史上最全)》

實(shí)現(xiàn)你的 linux 自由:

《Linux命令大全:2W多字,一次實(shí)現(xiàn)Linux自由》

實(shí)現(xiàn)你的 網(wǎng)絡(luò) 自由:

《TCP協(xié)議詳解 (史上最全)》

《網(wǎng)絡(luò)三張表:ARP表, MAC表, 路由表,實(shí)現(xiàn)你的網(wǎng)絡(luò)自由!!》

實(shí)現(xiàn)你的 分布式鎖 自由:

《Redis分布式鎖(圖解 - 秒懂 - 史上最全)》

《Zookeeper 分布式鎖 - 圖解 - 秒懂》

實(shí)現(xiàn)你的 王者組件 自由:

《隊(duì)列之王: Disruptor 原理、架構(gòu)、源碼 一文穿透》

《緩存之王:Caffeine 源碼、架構(gòu)、原理(史上最全,10W字 超級長文)》

《緩存之王:Caffeine 的使用(史上最全)》

《Java Agent 探針、字節(jié)碼增強(qiáng) ByteBuddy(史上最全)》

實(shí)現(xiàn)你的 面試題 自由:

4000頁《尼恩Java面試寶典 》 40個(gè)專題

免費(fèi)獲取11個(gè)技術(shù)圣經(jīng)PDF:

關(guān)鍵詞:

最新推薦

環(huán)球訊息:15億收入不要了,再見巴黎!3大線索指向加盟曼聯(lián),英超爭冠變天

今日凌晨,據(jù)《隊(duì)報(bào)》、天空體育、《電訊報(bào)》等多家媒體的消息,姆巴佩

LPL飯?zhí)渺`魂提問,近五年最強(qiáng)中單,F(xiàn)aker難進(jìn)前十,JDG有望絕殺_焦點(diǎn)熱文

這九人評選最強(qiáng)中單和TOP3,為此觀眾們進(jìn)行了一系列的討論,不同人有不

世界要聞:坐不住了!催化劑正式發(fā)揮作用,姆巴佩被迫決定,皇馬或成大贏家

今天凌晨,來自隊(duì)報(bào)的消息,姆巴佩團(tuán)隊(duì)已經(jīng)通過書面的形式正式通知大巴

天天熱頭條丨最新世界排名公布!國乒蟬聯(lián)5項(xiàng)第一,樊振東、孫穎莎面臨挑戰(zhàn)

德班世乒賽結(jié)束后,乒乓球世界排名迎來了新的變化,中國隊(duì)重新奪回五大

宣傳緝槍治爆_天天新消息

本報(bào)訊為切實(shí)加強(qiáng)緝槍治爆工作,近日,鐵嶺市公安局工人分局組織民警在

全球時(shí)訊:專項(xiàng)行動(dòng)清理違規(guī)漁具

本報(bào)訊為切實(shí)維護(hù)營口市伏季休漁秩序,確保增殖放流取得實(shí)效,保障廣大

統(tǒng)計(jì):海南旅游收入高于疫前2019 年同期水平

統(tǒng)計(jì)數(shù)據(jù)顯示,海南旅游市場旅游收入高于疫情前2019年同期水平,游客消

端午節(jié)發(fā)朋友圈文案怎么寫吸引人?以端午節(jié)為主題的文案看這里

端午文案1)粽子飄香,佳人安康。(粽子 祝福)2)粽子是端午限定,你我是命中注定。(愛情 結(jié)婚)3)粽子之...

冬至名言有哪些?冬至的古詩10首看這里

冬至佳句七絕·冬至一,楓葉紅時(shí)信已傳,梅心雪意亦如前。陽生莫問春何處,夜永應(yīng)知又一年。二,夜闌風(fēng)...

課文匆匆的體裁是什么?課文匆匆教材分析怎么寫?

課文匆匆原文燕子去了,有再來的時(shí)候;楊柳枯了,有再青的時(shí)候;桃花謝了,有再開的時(shí)候。但是,聰明的,...

【寧夏】隆德縣七名農(nóng)民晉升高素質(zhì)農(nóng)民職稱資格

本網(wǎng)訊近日,經(jīng)寧夏回族自治區(qū)固原市農(nóng)業(yè)系列職稱評審委員會(huì)評審、市人

usual反義詞是什么?active的反義詞有哪些?

lucky的反義詞是什么lucky的反義詞是unlucky。lucky的意思以及用法:一、作為形容詞1、幸運(yùn)的,好運(yùn)的一...

世界動(dòng)態(tài):@高考生,成績即將揭曉,志愿如何填報(bào)?指南來了!

祝??忌既肜硐氪髮W(xué),學(xué)上喜歡的專業(yè)!

最近的天氣也太熱了吧!快趁“熱”收下這份防中暑指南

在夏季,氣溫過高、濕度大、風(fēng)速小等條件下,非常容易引發(fā)中暑。“熱死

營造學(xué)青會(huì)氛圍!廣西體育明星團(tuán)走進(jìn)多所小學(xué)校園 快看點(diǎn)

“迎接學(xué)青會(huì)健康新廣西”廣西新時(shí)代文明實(shí)踐活動(dòng)暨全民健身志愿服務(wù)活

天天微速訊:最新國家級一流本科課程名單公布!廣西有這些

日前,教育部公布第二批國家級一流本科課程名單,共有5750門課程獲認(rèn)定

廣西科學(xué)守護(hù)“海上森林” 努力實(shí)現(xiàn)“雙碳”目標(biāo)

近日,廣西海洋環(huán)境監(jiān)測中心站對平陸運(yùn)河入??冢ㄎ挥跉J州茅尾海一帶)

國四柴油車報(bào)廢新規(guī)定_柴油車報(bào)廢新規(guī)定

1、具體要看什么種類的車,不同種類的車報(bào)廢年限不同。2、各類機(jī)動(dòng)車使

OEM廠家共同成長黃金搭檔 仙佑集團(tuán)貼心服務(wù)共創(chuàng)美好未來

近年來,隨著人們健康意識的提高,各種膏藥產(chǎn)品市場需求不斷增長。在這樣的市場背景下,仙佑醫(yī)藥膏藥代...

東亞的互不侵犯條約-聚看點(diǎn)

時(shí)至今日,我覺得中國可以考慮對日本和韓國提出簽訂互不侵犯條約。其主

小羅緬懷貝盧斯科尼:你的名字將永遠(yuǎn)鐫刻在AC米蘭|世界實(shí)時(shí)

直播吧6月13日訊貝盧斯科尼因病離世,小羅社媒曬合照緬懷。小羅寫道:

埃姆雷-詹:整座城市為多特奪冠做好準(zhǔn)備,不知如何消化這種辜負(fù)

在《法蘭克福匯報(bào)》的采訪中,埃姆雷-詹對于錯(cuò)失冠軍表示:“我依然還

世界報(bào)道:基米?;貞?yīng)哈維稱贊:我和拜仁還有兩年合同,我們有很偉大的計(jì)劃

直播吧6月13日訊此前哈維曾公開稱贊基米希,對此球員進(jìn)行了回應(yīng)。在被

挺硬氣!21歲女網(wǎng)新星父親放出豪言:我女兒要拿單打大滿貫冠軍_環(huán)球熱點(diǎn)評

只是雙打的大滿貫冠軍,但王欣瑜能夠奪冠,同樣是非常了不起的,這個(gè)小

談?wù)勀憬窈蟮呐Ψ较蛟趺磳懀亢⒆优Φ姆较蚝透倪M(jìn)措施看這里

今后的努力方向和改進(jìn)措施1、針對員工提出的推薦,我采取的措施是:①合理安排工作,要放得下一些追求,...

等待下一次重逢的詩句有哪些?形容遲早會(huì)見面的文案看這里

依依惜別的詩句1、黃鶴樓送孟浩然之廣陵 唐 李白故人西辭黃鶴樓,煙花三月下?lián)P州。孤帆遠(yuǎn)影碧空盡,唯...

蘭波詩集經(jīng)典句子集錦來了!蘭波寫得最好的詩看這里

蘭波的詩句1、唯一無法忍受即事事可忍受。——蘭波2、你隱沒在夢中,宛如雪化在火中。——蘭波3、天才就...

王昌齡最出名的三首詩你知道嗎?最著名的十首邊塞詩都在這兒

岑參的邊塞詩1、最動(dòng)人的想家詩:《逢入京使》《逢入京使》故園東望路漫漫,雙袖龍鐘淚不干。馬上相逢無...

當(dāng)前要聞:貴州電商云公司“一碼貴州”平臺入選2022年《中國電子商務(wù)報(bào)告》商業(yè)科技創(chuàng)新應(yīng)用優(yōu)秀案例

近日,商務(wù)部發(fā)布《中國電子商務(wù)報(bào)告(2022)》,多彩貴州網(wǎng)旗下貴州電子

古代經(jīng)商諺語大全來了!生意高手十句口訣在這兒

經(jīng)商名言警句1、越是巨大的冒險(xiǎn),越是需要巨大的謹(jǐn)慎。2、如果注定要做一個(gè)商人,那么就要隨時(shí)準(zhǔn)備接受...

小學(xué)生關(guān)于成長的詩歌有哪些?關(guān)于成長的詩歌朗誦稿在這兒

關(guān)于成長的詩歌《成長的方向》所有的河流都朝著東方不拒細(xì)流浩浩湯湯只是為了匯入大海汪洋所有的禾苗破...

哈姆雷特摘抄及感悟怎么寫?哈姆雷特讀書心得看這里

哈姆雷特讀書筆記一杯毒酒,一把毒劍。結(jié)局被鮮血浸染。哈姆雷特最終被眾人抬放于高臺,在沉重的葬禮進(jìn)...

觀天下!蘭州舉辦新就業(yè)群體心理健康輔導(dǎo)講座

本報(bào)訊5月25日,甘肅省蘭州市非公有制企業(yè)黨委在蘭州奔馬集團(tuán)舉辦針對

全民tv怎么直播 全民tv申請認(rèn)證主播教程 全民怎么開通直播_全球獨(dú)家

很多玩游戲的人都知道全民TV。我們看到上面很多直播,各種各樣的都有。

【全球速看料】微信app天天領(lǐng)紅包在哪 天天領(lǐng)紅包小程序

我們知道支付寶有個(gè)天天領(lǐng)紅包,微信從1月1日起到1月31日,每天在門店

火山直播怎么開通直播間 火山直播怎么開通呢

火山直播是一款手機(jī)直播平臺,主打網(wǎng)紅娛樂生活直播。當(dāng)然,我們在火山

京東上面怎么查看自己的年度賬單 京東怎么看年度賬單2020

京東上面怎么查看自己的年度賬單呢,下面小編介紹一下。具體如下:1 打

在ps軟件中怎么繪制直線 ps軟件里怎么畫直線

當(dāng)我們需要對圖片進(jìn)行一些調(diào)整時(shí),可以使用ps工具。在ps中是否可以繪制

6月13日生意社糠醛基準(zhǔn)價(jià)為11425.00元/噸

6月13日,生意社糠醛基準(zhǔn)價(jià)為11425 00元 噸,與本月初持平。生意社基準(zhǔn)

簡訊:有黑的意思的字_黝黑的意思

1、黝黑讀:yǒuhēi意思:皮膚暴露在太陽光下而曬成的青黑色。2、2、

環(huán)球今頭條!瘋狂24小時(shí)!皇馬計(jì)中計(jì)欺騙全歐,姆巴佩攤牌,1.2億巨星恐被打壓

這無疑是足壇的又一個(gè)重磅炸彈:姆巴佩向巴黎圣日耳曼攤牌了,他不會(huì)行

全球新動(dòng)態(tài):曼城挖角國米中場全能神將,瓜帥情有獨(dú)鐘,兩大障礙能否克服?

目前,曼城已經(jīng)找到了一個(gè)非常心儀的引援目標(biāo),他就是意甲豪門國際米蘭

瘋狂24小時(shí)!皇馬計(jì)中計(jì)欺騙全歐,姆巴佩攤牌,1.2億巨星恐被打壓-最資訊

這無疑是足壇的又一個(gè)重磅炸彈:姆巴佩向巴黎圣日耳曼攤牌了,他不會(huì)行

謎一樣的巴蒂!世界排名第一突然退役,巨大懸念留給萬千球迷

2022年3月23日,現(xiàn)女子世界排名第一的澳大利亞球員巴蒂宣布退出網(wǎng)壇,

全球簡訊:是否存在有注冊資本的分公司

一、是否存在有注冊資本的分公司?不存在,任何分公司都沒有注冊資本的

logo著作權(quán)登記費(fèi)用是多少?

每個(gè)公司在設(shè)立成功后都有其獨(dú)特的名稱,商品在生產(chǎn)后也有唯一的logo。

奧??萍迹航邮芘d證全球基金等機(jī)構(gòu)調(diào)研_報(bào)資訊

奧海科技(SZ002993,收盤價(jià):33 92元)發(fā)布公告稱,2023年6月12日,奧

【機(jī)構(gòu)調(diào)研記錄】北信瑞豐調(diào)研鷺燕醫(yī)藥

個(gè)股亮點(diǎn):旗下廈門燕來福醫(yī)院為一級醫(yī)療機(jī)構(gòu),開設(shè)了口腔科,目前開展

賽博朋克2077發(fā)售日期介紹 賽博朋克2077具體發(fā)售時(shí)間

賽博朋克2077“波蘭蠢驢”的又一力作,那么這款游戲到底會(huì)在什么時(shí)候發(fā)

當(dāng)前動(dòng)態(tài):GOAT德約斬獲生涯第23座大滿貫&3圈大滿貫第一人

北京時(shí)間昨日凌晨,2023年法網(wǎng)男單決賽,36歲的塞爾維亞名將德約科維奇

精彩放送

中網(wǎng)總獎(jiǎng)金公布:1175萬美元 ,同級別賽事獎(jiǎng)金第一,其中WTA賽事803.97萬美元 世界今熱點(diǎn)

世界觀點(diǎn):中國金花奪冠+豪奪335萬,德約科維奇收獲1768萬巨獎(jiǎng),23冠超納達(dá)爾

短訊!孫穎莎惹爭議!參加低級賽事,球迷質(zhì)疑國乒吃相難看,幫忙搶積分

【新視野】多家上市公司進(jìn)軍新能源產(chǎn)業(yè) 跨界“奔赴”合理性引監(jiān)管層關(guān)注

國內(nèi)單機(jī)容量最大的沖擊式水電機(jī)組完成國產(chǎn)化改造 成功并網(wǎng)發(fā)電 環(huán)球即時(shí)看

環(huán)球熱消息:奧運(yùn)積分排名更新!梁王暫居男雙榜首,何冰嬌高居女單第3

得加錢?記者:除皇馬外,巴黎愿今夏將姆巴佩出售給任何球隊(duì)

德約科維奇與穆雷同一日雙雙奪冠,球迷夢回四巨頭時(shí)代,不見費(fèi)納!-全球最資訊

【環(huán)球熱聞】海峽組合法網(wǎng)逆襲奪冠 小將王欣瑜未來可期

美元指數(shù)12日上漲

世界速讀:沙特能源大臣:沙特想與中國合作,不會(huì)理會(huì)西方的“擔(dān)憂”

海南發(fā)展(002163):6月12日北向資金增持25.24萬股|環(huán)球要聞

天天熱資訊!牛白_牛白藤別名

天府烤鹵官網(wǎng) 天府烤鹵總部地址-短訊

專班保障

張志丹:特斯拉FSD漸行漸近!新能源車能否迎來第二春?

熱點(diǎn)聚焦:演員張齡心:不結(jié)婚不生子,老了就去養(yǎng)老院,如今她打了自己的臉_天天動(dòng)態(tài)

中超之光!巴薩4000萬清洗曼城天才,1600萬簽大連神鋒,1年10球

【環(huán)球時(shí)快訊】記者:迪亞斯新賽季將身穿皇馬21號球衣

即時(shí):納喬:如果我能決定,我會(huì)在今夏把姆巴佩帶到皇馬

世界時(shí)訊:皇馬拒絕哈弗茨,迪巴拉拒絕沙特億元高薪,穆里尼奧再收頂薪報(bào)價(jià)

天天熱點(diǎn)評!對話|續(xù)寫茶香傳奇,90后非遺新人有一套

皇馬新7號確認(rèn)!億元先生接班阿扎爾挑戰(zhàn)C羅,10號留給姆巴佩?|環(huán)球即時(shí)看

饒明受傷,德約魯?shù)略賾?zhàn)法網(wǎng)火槍手杯!

馬琳難再指導(dǎo)陳夢,劉國梁布局,主教練放權(quán),主管教練負(fù)責(zé)場邊-世界速訊

【世界時(shí)快訊】陳夢丟大滿貫有原因!官方雜志透露世乒賽前情況,一姐身體出問題

全球連線|紅酒為媒推動(dòng)中外交流_環(huán)球百事通

每日消息!事關(guān)買菜! 2023年7月1日,柳州這一新規(guī)實(shí)施

每日報(bào)道:降雨范圍更大!13日起,廣西將進(jìn)入“龍舟水”集中期

天天微資訊!硅藻泥優(yōu)缺點(diǎn)大揭秘_硅藻泥優(yōu)缺點(diǎn)

恭喜內(nèi)馬爾!利雅得新月為內(nèi)馬爾提出報(bào)價(jià),年薪2.5億歐元

體壇3大GOAT齊聚!梅西德約卻只能在兩邊,詹姆斯丟冠卻是居中C位

德天空記者:于帕梅卡諾在拜仁過得不開心,但無意在今夏離隊(duì)_焦點(diǎn)快看

江瀚新材: 第一屆董事會(huì)第十四次會(huì)議決議公告 今日快訊

“蔚小理”一季度交卷:理想連續(xù)盈利 蔚來小鵬各有“焦慮”

新聞發(fā)布如何取信于民

【天天播資訊】好聽的閩南語歌曲排行2019_好聽的閩南語歌曲有哪些

人數(shù)破500萬!梅西現(xiàn)身直播間,平臺遭瘋狂吐槽:吃相太難看

助攻絕殺升意甲!國米300萬賣小麥孔虧了,7+9飛翼想重回藍(lán)黑軍團(tuán)

環(huán)球百事通!hang發(fā)揮不佳淚灑現(xiàn)場,LNG2:1險(xiǎn)勝FPX狀態(tài)堪憂,打野tarzan難頂大梁

中國金花單打9連敗,吞下一根油條,張帥狀態(tài)低迷已無任何競爭力

歷史上陳軫是一個(gè)怎樣的人(春秋戰(zhàn)國陳軫的人物形象分析)

美贊臣中國牽手微生態(tài)領(lǐng)軍企業(yè)未知君加速布局精準(zhǔn)營養(yǎng)健康管理

像蛇但不是蛇,廣西大明山保護(hù)區(qū)發(fā)現(xiàn)新記錄物種

全球微速訊:高清圖:貴南高鐵廣西段新建站房外部裝修全面完成

滾動(dòng):廣西積極參與全國碳排放權(quán)交易市場,交易額逐年上升

每周行業(yè)動(dòng)態(tài)一覽 新視野

hang發(fā)揮不佳淚灑現(xiàn)場,LNG2:1險(xiǎn)勝FPX狀態(tài)堪憂,打野tarzan難頂大梁

今頭條!海峽兩岸選手王欣瑜/謝淑薇法網(wǎng)女雙奪冠 健身房兩分鐘閑聊促成冠軍檔

【全球快播報(bào)】王欣瑜/謝淑薇奪得法網(wǎng)女雙冠軍

聯(lián)系我們:55 16 53 8@qq.com
關(guān)于我們| 聯(lián)系方式| 版權(quán)聲明| 供稿服務(wù)| 友情鏈接

塞北網(wǎng) 版權(quán)所有,未經(jīng)書面授權(quán)禁止使用

京ICP備2021034106號-10 營業(yè)執(zhí)照公示信息

Copyright©2008-2020 By www.twwot.com All Rights Reserved