原创 常見限流算法

常見的限流算法有:令牌桶、漏桶、計數器。 令牌桶 令牌桶算法: 一個存放固定容量令牌的桶(假設容量爲n), 按照固定速率往桶裏添加令牌(假設限速爲10r/s,則按照100毫秒的固定速率往桶中添加令牌,當桶滿時,新添加的令牌會被丟棄), 請

原创 使用Guava平滑限流某個接口的請求數

Guava RateLimiter提供的令牌桶算法可用於平滑突發限流(SmoothBursty)和平滑預熱限流(SmoothWarmingUp)實現。 SmoothBursty 以指定的吞吐量(permits per second)創建一

原创 通過ArrayBlockingQueue源碼簡析一個AQS和多個Condition工作機制

在學習ReentrantLock時會不會有這樣的問題,爲併發包中的Lock啥要支持多個等待隊列? 爲啥ArrayBlockingQueue是一個鎖,兩個Condition? ReentrantLock裏的sync變量(FairSync、N

原创 java的synchronized鎖實現與Monitor(管程)機制

        在《操作系統同步原語》 這篇文章中,介紹了操作系統在面對 進程/線程 間同步的時候,所支持的一些同步原語,其中 semaphore 信號量 和 mutex 互斥量是最重要的同步原語。         在使用基本的 mute

原创 Lua中self標識

       在lua中,表擁有一個標識:self。self類似於this指針,大多數面嚮對象語言都隱藏了這個機制,在編碼時不需要顯示的聲明這個參數,就可以在方法內使用this(例如C++和C#)。        在lua中,提供了冒號操

原创 RabbitMQ備用交換機和死信隊列設置出現type 'longstr' but current is none

 AlternateExchange是RabbitMQ中自定義的備用交換機的名稱 Channel shutdown: channel error; protocol method: #method<channel.close>(repl

原创 synchronized鎖的實現原理及鎖升級

synchronized同步         Java中每一個對象都可以作爲鎖。具體表現爲以下3種形式: 普通同步方法,鎖是當前實例對象 靜態同步方法,鎖是當前類的class對象 同步方法塊,鎖是synchronized括號裏配

原创 spring-boot-maven-plugin

https://docs.spring.io/spring-boot/docs/current/maven-plugin/index.html The Spring Boot Maven Plugin provides Spring Bo

原创 將Sleuth添加到項目裏做鏈路追蹤的三種方式(Greenwich.SR5版)

Important To ensure that your application name is properly displayed in Zipkin, set the spring.application.name propert

原创 new出來的線程類中無法使用@Autowired注入Bean

根本原因: @Autowired注入Spring Bean,則當前類必須也是Spring Bean才能注入成功,不能用new xxx()來獲得對象,這種方式獲得的對象也無法使用@Autowired註解注入Bean。 因此,當我們在new一

原创 Spring Cloud Sleuth與Zipkin配合使用

        Zipkin是Twitter開源的分佈式跟蹤系統,基於Dapper的論文設計而來。它的主要功能是收集系統的時序數據,從而追蹤微服務架構的系統延時等問題。Zipkin還提供了一個非常友好的界面,來幫助分析追蹤數據。 Zipk

原创 隊列同步器抽象類AbstractQueuedSynchronizer(AQS)

       隊列同步器AbstractQueuedSynchronizer(以下簡稱同步器),是構建鎖或者其他同步組件的基本框架,使用了一個int成員變量表示同步狀態,通過內置的FIFO隊列來完成獲取資源的線程的排隊工作。   同步器的

原创 自旋鎖與自適應自旋及JDK中使用自旋的例子

        互斥同步對性能最大的影響是阻塞的實現,掛起線程和恢復線程的操作都需要轉入內核態中完成,這些操作給系統的併發性能帶來了很大的壓力。 同時,虛擬機的開發團隊也注意到在許多應用上,共享數據的鎖定狀態只會持續很短的一段時間,爲了這

原创 Spring Cloud中,Feign/Ribbon整合Hystrix後第一次請求服務提供接口失敗

造成該問題的原因         Hystrix默認的超時時間是1秒,如果超過這個時間尚未響應,將會進入fallback代碼。而首次請求往往會比較慢(由於Ribbon是懶加載的,在首次請求時,纔會開始初始化相關類),因此在一些機器特別是配

原创 SpringCloud各組件配置屬性

SpringCloud各組件有很多的配置屬性,我們在使用的時候需要查找了解,下面已最新的Hoxton SR3爲例,怎麼找各組件配置屬性 第一步:選擇SpringCloud版本如Hoxton SR3 --> Reference Doc 第