基于 Spring Cloud 完整的微服務架構實戰

本項目是一個基于 Spring Boot、Spring Cloud、Spring Oauth2 和 Spring Cloud Netflix 等框架構建的微服務項目。

@作者:Sheldon地址:https://github.com/zhangxd1989

技術棧

  • Spring boot - 微服務的入門級微框架,用來簡化 Spring 應用的初始搭建以及開發過程。
  • Eureka - 云端服務發現,一個基于 REST 的服務,用于定位服務,以實現云端中間層服務發現和故障轉移。
  • Spring Cloud Config - 配置管理工具包,讓你可以把配置放到遠程服務器,集中化管理集群配置,目前支持本地存儲、Git 以及 Subversion。
  • Hystrix - 熔斷器,容錯管理工具,旨在通過熔斷機制控制服務和第三方庫的節點,從而對延遲和故障提供更強大的容錯能力。
  • Zuul - Zuul 是在云平臺上提供動態路由,監控,彈性,安全等邊緣服務的框架。Zuul 相當于是設備和 Netflix 流應用的 Web 網站后端所有請求的前門。
  • Spring Cloud Bus - 事件、消息總線,用于在集群(例如,配置變化事件)中傳播狀態變化,可與 Spring Cloud Config 聯合實現熱部署。
  • Spring Cloud Sleuth - 日志收集工具包,封裝了 Dapper 和 log-based 追蹤以及 Zipkin 和 HTrace 操作,為 SpringCloud 應用實現了一種分布式追蹤解決方案。
  • Ribbon - 提供云端負載均衡,有多種負載均衡策略可供選擇,可配合服務發現和斷路器使用。
  • Turbine - Turbine 是聚合服務器發送事件流數據的一個工具,用來監控集群下 hystrix 的 metrics 情況。
  • Spring Cloud Stream - Spring 數據流操作開發包,封裝了與 Redis、Rabbit、Kafka 等發送接收消息。
  • Feign - Feign 是一種聲明式、模板化的 HTTP 客戶端。
  • Spring Cloud OAuth2 - 基于 Spring Security 和 OAuth2 的安全工具包,為你的應用程序添加安全控制。

應用架構

該項目包含 8 個服務

  • registry - 服務注冊與發現
  • config - 外部配置
  • monitor - 監控
  • zipkin - 分布式跟蹤
  • gateway - 代理所有微服務的接口網關
  • auth-service - OAuth2 認證服務
  • svca-service - 業務服務A
  • svcb-service - 業務服務B

體系架構

?

architecture

?

應用組件

?

components

?

啟動項目

  • 使用 Docker 快速啟動
    1. 配置 Docker 環境
    2. mvn clean package?打包項目及 Docker 鏡像
    3. 在項目根目錄下執行?docker-compose up -d?啟動所有項目
  • 本地手動啟動
    1. 配置 rabbitmq
    2. 修改 hosts 將主機名指向到本地
      127.0.0.1 registry config monitor rabbitmq auth-service
      或者修改各服務配置文件中的相應主機名為本地 ip
    3. 啟動 registry、config、monitor、zipkin
    4. 啟動 gateway、auth-service、svca-service、svcb-service

項目預覽

注冊中心

訪問 http://localhost:8761/ 默認賬號 user,密碼 password

?

registry

?

監控

訪問 http://localhost:8040/ 默認賬號 admin,密碼 admin

控制面板

?

monitor

?

應用注冊歷史

?

monitor

?

Turbine Hystrix面板

?

monitor

?

應用信息、健康狀況、垃圾回收等詳情

?

monitor

?

計數器

?

monitor

?

查看和修改環境變量

?

monitor

?

管理 Logback 日志級別

?

monitor

?

查看并使用 JMX

?

monitor

?

查看線程

?

monitor

?

認證歷史

?

monitor

?

查看 Http 請求軌跡

?

monitor

?

Hystrix 面板

?

monitor

?

鏈路跟蹤

訪問 http://localhost:9411/ 默認賬號 admin,密碼 admin

控制面板

?

zipkin

?

鏈路跟蹤明細

?

zipkin

?

服務依賴關系

?

zipkin

?

RabbitMQ 監控

Docker 啟動訪問 http://localhost:15673/ 默認賬號 guest,密碼 guest(本地 rabbit 管理系統默認端口15672)

?

rabbit

?

接口測試

  1. 獲取 Token
curl -X POST -vu client:secret http://localhost:8060/uaa/oauth/token -H "Accept: application/json" -d "password=password&username=anil&grant_type=password&scope=read%20write"

返回如下格式數據:

 
  1. {

  2. "access_token": "eac56504-c4f0-4706-b72e-3dc3acdf45e9",

  3. "token_type": "bearer",

  4. "refresh_token": "da1007dc-683c-4309-965d-370b15aa4aeb",

  5. "expires_in": 3599,

  6. "scope": "read write"

  7. }

  1. 使用 access token 訪問 service a 接口
curl -i -H "Authorization: Bearer eac56504-c4f0-4706-b72e-3dc3acdf45e9" http://localhost:8060/svca

返回如下數據:

 
  1. svca-service (172.18.0.8:8080)===>name:zhangxd

  2. svcb-service (172.18.0.2:8070)===>Say Hello

  1. 使用 access token 訪問 service b 接口
curl -i -H "Authorization: Bearer eac56504-c4f0-4706-b72e-3dc3acdf45e9" http://localhost:8060/svcb

返回如下數據:

svcb-service (172.18.0.2:8070)===>Say Hello
  1. 使用 refresh token 刷新 token
curl -X POST -vu client:secret http://localhost:8060/uaa/oauth/token -H "Accept: application/json" -d "grant_type=refresh_token&refresh_token=da1007dc-683c-4309-965d-370b15aa4aeb"

返回更新后的 Token:

 
  1. {

  2. "access_token": "63ff57ce-f140-482e-ba7e-b6f29df35c88",

  3. "token_type": "bearer",

  4. "refresh_token": "da1007dc-683c-4309-965d-370b15aa4aeb",

  5. "expires_in": 3599,

  6. "scope": "read write"

  7. }

  1. 刷新配置
curl -X POST -vu user:password http://localhost:8888/bus/refresh

源碼下載

github.com/souyunku/sp…

如果想學習Java工程化、高性能及分布式、微服務、Spring,MyBatis,Netty源碼分析的朋友可以加我的Java進階群:318261748 群里有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給大家。如果想領取spring boot和spring colud學習資料可以關注公眾號“大數據技術匯”回復springboot領取下載鏈接。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387018.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387018.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387018.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql Invalid use of group function的解決辦法

錯誤語句:SELECT s.SID, s.Sname, AVG(a.score)FROM student sLEFT JOIN sc a ON s.SID a.SID WHERE AVG(a.score) > 60GROUP BY s.SID正確語句: SELECTs.SID,s.Sname,AVG(a.score)FROMstudent sLEFT JOIN sc a ON s.SID a.SID GROUP BYs.SID HAVIN…

ipython notebook 中 wavefile, display, Audio的使用

基于ipython notebook的 wavefile以及display, Audio的使用首先是使用的庫使用 wavfile 讀取.wav文件使用display,Audio播放聲音最近在做聲音信號處理的時候,使用了ipython notebook。發現相較于matlab,python在有關生成wave文件和播放音頻需要利用到sci…

spring 設計模式

設計模式作為工作學習中的枕邊書,卻時常處于勤說不用的尷尬境地,也不是我們時常忘記,只是一直沒有記憶。 今天,螃蟹在IT學習者網站就設計模式的內在價值做一番探討,并以spring為例進行講解,只有領略了其設計…

Ansible-----循環

with_dict迭代字典項 使用"with_dict"可以迭代字典項。迭代時,使用"item.key"表示字典的key,"item.value"表示字典的值。 ---- hosts: localhosttasks:- debug: msg"{{item.key}} & {{item.value}}"with_di…

ROS(Robot Operating System)筆記 : 1.使用launch file在gazebo中生成urdf機器人

ROS(Robot Operating System) 1.使用launch file在gazebo中生成urdf機器人 最近接觸了ROS(Robot Operating System),發現單單學習官網http://wiki.ros.org/上的教程,在實際操作過程中仍然會遭遇許多困難。這一系列關于ROS的文章記錄了ROS學習過程中可能遇到的問題…

[asp.net] 利用WebClient上傳圖片到遠程服務

一、客戶端 1.頁面 <form id"Form1" method"post" runat"server" enctype"multipart/form-data">     <input id"MyFile" type"file" runat"server" />     <br />     …

ROS project part 1: Ubuntu中安裝opencv包以及相應的依賴

首先在ubuntu linux上安裝opencv $ sudo apt-get install python-opencv使用ipython 驗證 opencv的安裝 $ import cv2 as cv $ print(cv.__version__)查看當前的ubuntu 版本 $ cat /etc/issue查看當前python版本 下列代碼分別用于查看python3 python2的已安裝版本 $ python…

FastReport4.6程序員手冊_翻譯

一、使用TfrxReport 組件工作1、加載并存儲報表默認情況下&#xff0c;報表窗體同項目窗體構存儲在同一個DFM文件中。多數情況下&#xff0c;無須再操作&#xff0c;因而你就不必采用特殊方法加載報表。如果你決定在文件中存儲報表窗體或者是數據庫的Blob字段&#xff08;他提供…

Python音頻信號處理 1.短時傅里葉變換及其逆變換

短時傅里葉變換及其逆變換 本篇文章主要記錄了使用python進行短時傅里葉變換&#xff0c;分析頻譜&#xff0c;以及通過頻譜實現在頻域內降低底噪的代碼及分析&#xff0c;希望可以給同樣在學習信號處理的大家一點幫助&#xff0c;也希望大家對我的文章多提意見建議。 一. 短…

Java多線程同步機制

一段synchronized的代碼被一個線程執行之前&#xff0c;他要先拿到執行這段代碼的權限&#xff0c;在 java里邊就是拿到某個同步對象的鎖&#xff08;一個對象只有一把鎖&#xff09;&#xff1b; 如果這個時候同步對象的鎖被其他線程拿走了&#xff0c;他&#xff08;這個線程…

SpringBoot與數據訪問

pom依賴&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-conne…

Python音頻信號處理 2.使用譜減法去除音頻底噪

使用譜減法去除音頻底噪 上一篇文章我主要分享了短時傅立葉變換及其逆變換在python中的實現&#xff0c;有興趣的可以閱讀一下該篇文章&#xff0c;地址如下&#xff1a; Python音頻信號處理 1.短時傅里葉變換及其逆變換 那么在本篇文章中&#xff0c;我們將利用短時傅立葉變…

線程池的優點

線程池的優點 1、線程是稀缺資源&#xff0c;使用線程池可以減少創建和銷毀線程的次數&#xff0c;每個工作線程都可以重復使用。 2、可以根據系統的承受能力&#xff0c;調整線程池中工作線程的數量&#xff0c;防止因為消耗過多內存導致服務器崩潰。 線程池的創建 public…

ROS(Robot Operating System)筆記 : 2.創建并配置package

ROS(Robot Operating System)筆記 : 2.創建一個ROS包并設置其依賴 1.首先來到ros的工作目錄下&#xff0c;接著使用 catkin_make [包名稱] [依賴1] [依賴2] … 創建一個包名為 challenge_project 的 ros包。 $ catkin_create_pkg challenge_project rospy std_msgs cv_bri…

Java線程相關的熱門面試題

1) 什么是線程&#xff1f; 線程是操作系統能夠進行運算調度的最小單位&#xff0c;它被包含在進程之中&#xff0c;是進程中的實際運作單位。程序員可以通過它進行多處理器編程&#xff0c;你可以使用多線程對運算密集型任務提速。比如&#xff0c;如果一個線程完成一個任務要…

linux運維、架構之路-jumpserver

linux運維、架構之路-jumpserver 一、jumpserver介紹 是一款由python編寫開源的跳板機(堡壘機)系統&#xff0c;實現了跳板機應有的功能。基于ssh協議來管理&#xff0c;客戶端無需安裝agent。 特點&#xff1a; 完全開源&#xff0c;GPL授權 Python編寫&#xff0c;容易再次開…

C++ STL學習筆記 : 1. template 模板函數

本篇文章是學習C STL庫的第一篇筆記&#xff0c;主要記錄了使用template關鍵字創建模板函數的方法。 下面用一個非常簡單的例子解釋模板函數的用法 : #include <iostream> using namespace std;template <class T> void myswap(T& a, T& b) {T temp a;a…

C++ STL學習筆記 : 2. unordered map 容器

本文中&#xff0c;簡單總結一下使用unordered map 的心得。unordered_map容器屬于STL中關聯表的一種&#xff0c;常用的map容器與unordered_map容器在使用中有著很大程度的相同點&#xff0c;在之后的文章中我可能會針對二者的相同點與不同點進行細致的分析&#xff0c;這里就…

tensorflow 安裝在Anaconda

python環境&#xff1a;win10 64下anaconda4.2.0(python3.5)。安裝tensorflow過程是在Anaconda Prompt中進行安裝 1&#xff1a;打開Anaconda Prompt 在安裝之前&#xff0c;說幾個關于conda的小命令 conda list&#xff1a;可以顯示已經安裝好的庫。 conda install 庫名 &…

伯努利數學習筆記的說...

經過一天的學習&#xff0c;我們發現伯努利數是個非常有用 &#xff08;個屁&#xff09; 的數列 定義 但是...伯努利數是什么呢&#xff1f;我們先給伯努利數一個定義&#xff1a; 令 \(B(i)\) 表示 伯努利數第 i 項&#xff0c;那么有&#xff1a; \[\sum_{i0}^{n} \begin{pm…