原创 Eureka, Client, Ribbon之間的緩存和服務實時上下線實現思路分析

在使用Eureka做註冊中心時,我平時遇到的最不爽問題,就是無法做到實時上下線。比如,我服務已經正常下線了,爲什麼上游還能調通?我服務已經上線了,爲什麼還有等"很久"才能真正被其他服務所"發現"?其實這些都是從Eureka到Clien

原创 spring-kafka的線程模型與spring.kafka.listener.concurrency參數

在spring應用中如果需要訂閱kafka消息,通常情況下我們不會直接使用kafka-client, 而是使用更方便的一層封裝spring-kafka。不過,它可不是簡單的封裝了kafka-client, 這裏面有很多需要注意的問題,

原创 使用Vertx編寫HTTP客戶端

談談Apache的HTTP Client 談到HTTP客戶端, 在Java界最有名的當屬Apache HTTP Client庫了。我相信絕大多數人在使用Apache HTTP Client時都是使用的同步版本,即請求發起後需要一直等待

原创 使用Vert.x + SpringBoot編寫業務系統

這一期文章主要爲大家介紹如何將Vert.x與SpringBoot結合起來編寫最最最常見的業務系統,即數據庫增刪改查。 談兩句SpringBoot SpringBoot大家都很熟了,一個快速開發框架,其最大的特點是可將Spring應用打

原创 【Vert.x初體驗1】4行代碼實現HTTP Server

4行代碼 上古時代的Java程序員如果想寫一個HTTP服務,需要按下面的步驟操作: 編寫Servlet, 實現doXXX()方法 打成war包 部署Tomcat 將war包copy到指定目錄下進行"部署" 訪問8080 一頓操作猛

原创 比較兩個大文本文件的差異並輸出增量和減量

現有兩個4G大小、按行分割、每行爲50字符(大小寫字母)的text文件A, B, 現在需要在有限的內存下(如2G)以B文件爲基準,計算出B相對於A增加了哪些數據和減少了哪些數據,分別以added.txt和deleted.txt命名保存

原创 使用Spring Cloud Netflix技術棧實施微服務架構

本文假設讀者已經熟悉分佈式系統的常見模式,如服務發現、註冊,統一配置管理等 前言 系統一旦走向分佈式,其複雜程度成倍增長,傳統單體應用只考慮業務邏輯的開發方式已經不再適用。正因其複雜性,目前只有業務需求大的大型互聯網公司纔會(被迫)採

原创 【Vert.x準備篇2】C10K問題與Reactor模式

知乎專欄: 關於Vert.x你需要知道的一切 C10K問題是1999年一個叫Dan Kegel的美國人提出的概念,其中C爲concurrently, 10K指的是1萬個網絡連接, 結合起來意爲如何能夠做到併發處理1萬個連接。 這裏首

原创 【vert.x準備篇1】同步和異步,阻塞和非阻塞概念澄清

爲了能更好的理解vert.x的線程模型,我們必須要先明確幾個概念:同步(Synchronous)和異步(Asynchronous),阻塞(Blocking)和非阻塞(Non-Blocking)。關於這幾個名詞的解釋網絡上也是衆多紛紜,

原创 Filebeat實時日誌監控最佳配置

在使用filebeat監控日誌文件時,如果不會做任何配置的話你可能會發現一些奇怪的問題,即有時新的日誌行會馬上發送到目標輸出地,有時候卻要延遲近10s纔會被髮送。要解決這個問題,首先要明確filebeat中幾個組件的作用和幾個重要的參

原创 Filebeat + ES + Kibana日誌解析痛點解決

使用Filebeat + ES + Kibina的組合進行日誌收集的一個優點就是輕量級,因爲去掉了笨重的logstash, 佔用資源更少。但這也引入了一個問題,即filebeat並沒有logstash那樣強大的日誌解析能力,往往只能把

原创 從Go語言實現模板設計模式淺談Go的抽象能力

首先拋出一個觀點,那就是Go的抽象能力的確不如Java這種嚴格的OOP語言強。具體表現之一就是模板模式的實現。 模板的實現 模板模式是OOP編程中的一把神兵利器,用好了能夠提高代碼的複用程度,大大提高開發效率。例如,我們可以在父類中定

原创 如何裸寫或利用Spring掃描出指定包下的所有類名

在很多Java框架中都有組件掃描功能,即給出一個註解,框架能夠把所有標註了此註解的類找出來。這種操作的本質是給出一個名包,能獲取到此包下的所有類名,然後再通過反射判斷是否加了指定的註解。無論是什麼框架,包括Spring, 完成這個功能

原创 Java異常(exception)性能優化

在Java中,構造異常對象是”十分”耗時的,其原因是在默認情況下,創建異常對象時會調用父類Throwable的fillInStackTrace()方法生成棧追蹤信息,JDK中的源碼如下: public synchronized Thr

原创 @FeignClient同一個name使用多個配置類的解決方案

Feign有一個侷限性,即對於同一個service-id只能使用一個配置類,如果有多個@FeignClient註解使用了相同的name屬性,則註解的configuration參數會被覆蓋。至於誰覆蓋誰要看Spring容器初始化Bean的順