spring框架、alibaba nacos、sentinel 使用、nacos沒看到應用、sentinel控制檯看不到應用

框架

框架就是一些類和接口的集合,通過這些類和接口協調來完成一系列的程序實現。JAVA框架可以分爲三層,表示層,業務層和物理層。框架又叫開發中的半成品,它不能提供整個web應用程序的所有東西,但是有了框架,我們就可以集中精力進行業務邏輯的開發而不用去關心它的技術實現以及一些輔助的業務邏輯。

 

Spring、Spring MVC、Spring Boot

spring 是一個框架的集合,包含了很多組件。

 

spring MC 只是 spring 其中一個 web 組件。

 

關於 spring boot 官網給出的解釋

Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run".

We take an opinionated view of the Spring platform and third-party libraries so you can get started with minimum fuss. Most Spring Boot applications need minimal Spring configuration.

英文不是特別好,大致意思是:

通過 spring boot ,你可以輕鬆地創建獨立的、生產基於 spring 的應用程序,並運行它。

你可以以最小的 spring 平臺和第三方類庫啓動你的應用,大多數spring boot 程序只需要很少的spring 配置。

 

關係大概就是這樣

spring mvc < spring < springboot

 

Spring Boot 對比Spring的一些優點包括

  • 提供嵌入式容器支持
  • 使用命令java -jar獨立運行jar
  • 在外部容器中部署時,可以選擇排除依賴關係以避免潛在的jar衝突
  • 部署時靈活指定配置文件的選項
  • 用於集成測試的隨機端口生成

結論

Spring Boot只是Spring本身的擴展,使開發,測試和部署更加方便。開箱即用。

 

spring IOC容器的初始化過程

1.resource 資源定位,BeanDefinition 資源定位。

2. BeanDefinition 載入過程,把用戶定義好的bean表示成 IOC 容器內部數據結構,而這個容器內部數據結構就是BeanDefinition

3. 向 IOC 容器註冊註冊這些 BeanDefinition ,將這些bean保存到 hashmap 中。

 

BeanFactory 和 FactoryBean的區別

beanfactory 是個 factory ,也就是 IOC容器(spring 容器)或對象工廠。在spring中,所有的bean都由 beanfactory 來管理,提供了實例化對象和獲取的功能。

使用場景:

  • 從 IOC 容器中獲取bean
  • 檢索 IOC 容器是否包含指定的bean
  • 判斷bean是否是單例

FactoryBean 是個 bean,這個bean不是簡單的bean,而是一個能生產或者修飾對象生成的工廠bean,它的實現與設計模式中的工廠模式和修飾器模式類似。

使用場景:

ProxyFactoryBean

 

spring bean的生命週期

  1. 實例化 Instantiation
  2. 屬性賦值 Populate
  3. 初始化 Initialization
  4. 銷燬 Destruction

 

 

spring 組件

Spring Cloud Config   配置管理工具包,讓你可以把配置放到遠程服務器,集中化管理集羣配置,目前支持本地存儲、Git以及Subversion

Spring Cloud Bus 事件、消息總線,用於在集羣(例如,配置變化事件)中傳播狀態變化,可與Spring Cloud Config聯合實現熱部署。

Eureka  雲端服務發現,一個基於 REST 的服務,用於定位服務,以實現雲端中間層服務發現和故障轉移。

Hystrix  熔斷器,容錯管理工具,旨在通過熔斷機制控制服務和第三方庫的節點,從而對延遲和故障提供更強大的容錯能力。

Ribbon 提供雲端負載均衡,有多種負載均衡策略可供選擇,可配合服務發現和斷路器使用。

Feign  Feign是一種聲明式、模板化的HTTP客戶端。

Zuul  Zuul 是在雲平臺上提供動態路由,監控,彈性,安全等邊緣服務的框架。Zuul 相當於是設備和 Netflix 流應用的 Web 網站後端所有請求的前門。

Spring Cloud Sleuth 日誌收集工具包,封裝了Dapper和log-based追蹤以及Zipkin和HTrace操作,爲SpringCloud應用實現了一種分佈式追蹤解決方案。鏈路追蹤工具

Spring Cloud Security  基於spring security的安全工具包,爲你的應用程序添加安全控制。

 

其它

zookeeper   分佈式服務框架,它主要是用來解決分佈式應用中經常遇到的一些數據管理問題,如:統一命名服務、狀態同步服務、集羣管理、分佈式應用配置項的管理等。

docker  一個開源的應用容器引擎,可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後發佈到任何流行的 Linux 機器上,也可以實現虛擬化。

kubernetes(k8s)  用於管理雲平臺中多個主機上的容器化的應用。提供了應用部署,規劃,更新,維護的一種機制。

redis  一個開源(BSD許可)的,內存中的數據結構存儲系統,它可以用作數據庫、緩存和消息中間件。

Mq  消息隊列中間件是分佈式系統中重要的組件,主要解決應用解耦,異步消息,流量削鋒等問題,實現高性能,高可用,可伸縮和最終一致性架構

kafka  一種高吞吐量的分佈式發佈訂閱消息系統,它可以處理消費者在網站中的所有動作流數據

 

 

nacos 學習

Nacos 致力於幫助您發現、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您快速實現動態服務發現、服務配置、服務元數據及流量管理。

  • 添加pom依賴:
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>${latest.version}</version>
</dependency>
  • 增加配置文件
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
  •  spring boot:

       @EnableDiscoveryClient

nacos管理頁--> 服務管理-->服務列表,查詢

 

使用nacos 註冊服務,但是服務列表中沒有服務信息

注意:版本 2.1.x.RELEASE 對應的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 對應的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 對應的是 Spring Boot 1.5.x 版本。

官網有如上一段話,一定注意版本!!!

另外好像服務發現有點延遲。

https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

 

Sentinel 是什麼?

隨着微服務的流行,服務和服務之間的穩定性變得越來越重要。Sentinel 以流量爲切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。

Sentinel 具有以下特徵:

  • 豐富的應用場景:Sentinel 承接了阿里巴巴近 10 年的雙十一大促流量的核心場景,例如秒殺(即突發流量控制在系統容量可以承受的範圍)、消息削峯填谷、集羣流量控制、實時熔斷下游不可用應用等。
  • 完備的實時監控:Sentinel 同時提供實時的監控功能。您可以在控制檯中看到接入應用的單臺機器秒級數據,甚至 500 臺以下規模的集羣的彙總運行情況。
  • 廣泛的開源生態:Sentinel 提供開箱即用的與其它開源框架/庫的整合模塊,例如與 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相應的依賴並進行簡單的配置即可快速地接入 Sentinel。
  • 完善的 SPI 擴展點:Sentinel 提供簡單易用、完善的 SPI 擴展接口。您可以通過實現擴展接口來快速地定製邏輯。例如定製規則管理、適配動態數據源等。

Sentinel 的主要特性:

Sentinel-features-overview

 

使用: JDK 1.8(必須)

下載 sentinel 控制檯 

下載 sentinel-dashboard-1.7.2.jar 這個包,另一個啓動報錯,目前沒看到官方給出的配置文件是什麼樣的

sentinel-envoy-rls-token-server-1.7.2.jar   應該是帶登錄功能的。默認用戶名和密碼都是 sentinel,鑑權模塊文檔

cmd 到目錄下    8080是 sentinel的端口

java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar

若啓動多個應用,則需要通過 -Dcsp.sentinel.api.port=xxxx

http://localhost:8080/#/login

 

應用接入控制檯(不需要的可以不接入)

應用中引入 Transport 模塊來與 Sentinel 控制檯進行通信。

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-transport-simple-http</artifactId>
    <version>x.y.z</version>
</dependency>

擴展:修改配置項

啓動springboot 

一種:VM options 添加  -Dproject.name=xxx -Dcsp.sentinel.dashboard.server=consoleIp:port

第二種配置文件

#和控制檯通信的端口
spring.cloud.sentinel.transport.port=8085
#控制檯應用ip:端口
spring.cloud.sentinel.transport.dashboard=localhost:8080

默認不會主動通信,需要訪問下加了註解的請求。

訪問後會打印。  無法在控制檯看到應用的話請往下看

2020-06-30 23:00:06.715  INFO 14304 --- [nio-8700-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 8 ms
INFO: Sentinel log output type is: file
INFO: Sentinel log charset is: utf-8
INFO: Sentinel log base directory is: C:\Users\dj\logs\csp\
INFO: Sentinel log name use pid is: false

三點需要注意下

1. 應用不會主動和控制檯通信,需要訪問加了註解的資源。

2.去掉 hystrix 依賴,不然會走 hystrix

3.訪問了加了註解的方法,但是沒打印日誌

INFO: log base dir is: C:\Users\dj\logs\csp\
INFO: log name use pid is: false

添加pom,測試了多次,好像這一個dependency就可以,上面的transport 都不用了。我的是spring boot

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    <version>2.0.0.RELEASE</version>
</dependency>

整體整理下:

pom

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    <version>2.0.0.RELEASE</version>
</dependency>

配置:

#和控制檯通信的端口
spring.cloud.sentinel.transport.port=8085
#控制檯應用ip:端口
spring.cloud.sentinel.transport.dashboard=localhost:8080

註解:

@SentinelResource(value = "sayHello")
    @GetMapping("/aliveid")
    public String alive(@RequestParam("id") String id){
        return userApi.aliveById(id);
    }

sentinel 對 feign 的支持

@Bean
@SentinelRestTemplate(blockHandler = "handleException", blockHandlerClass = ExceptionUtil.class)
public RestTemplate restTemplate() {
    return new RestTemplate();
}

https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel

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