使用 Nacos 實現動態路由
Hello,大家好,我是 V 哥。最近寫到 使用 Nacos 實現動態路由的問題,整理了一下思路和案例,分享給大家。 使用 Nacos 實現 Spring Cloud Gateway 的動態路由,主要涉及到以下幾個步驟: 添加依賴:在 Spring Cloud Gateway 應用的 pom.xml 文件中添加 Nacos 相關依賴。 配置 Nacos:在 application.yml 或
Nickname 威哥愛編程
Contributes218
Followers0
Hello,大家好,我是 V 哥。最近寫到 使用 Nacos 實現動態路由的問題,整理了一下思路和案例,分享給大家。 使用 Nacos 實現 Spring Cloud Gateway 的動態路由,主要涉及到以下幾個步驟: 添加依賴:在 Spring Cloud Gateway 應用的 pom.xml 文件中添加 Nacos 相關依賴。 配置 Nacos:在 application.yml 或
Nickname 威哥愛編程
大家好,我是V哥,國足0-7不敵日本,創下12年來最大慘敗,真的好久不看球賽了,我關心的是,作為國內唯一一家轉播平台愛奇藝體育昨天崩了,官方道歉文中解釋由於瞬時流量過大導致,這讓我想起服務熔斷、降級和限流是微服務架構中用於提高系統穩定性和可用性的三種關鍵策略。 介紹 服務熔斷(Circuit Breaker) 服務熔斷是一種防止服務故障蔓延的機制。它的概念來源於電力系統中的熔斷器,當電流超過電路的
Nickname 威哥愛編程
Hello,大家好,我是V哥。很多文章都在介紹設計模式怎麼用,講解設計模式的原理等等,設計模式的思想是編程中的精髓,用好了可以讓代碼結構利於維護和擴展,同時代碼風格也更加優雅,V 哥也寫過這樣一篇文章,但很少有人從反模式的角度來講一講,過度濫用設計模式將給項目帶來災難。 設計模式反模式(Anti-Pattern)是指那些表面上看起來像是設計模式,但實際上會導致軟件設計問題的做法。這些做法可能會導致
Nickname 威哥愛編程
大家好,我是 V 哥。在實現"加入購物車"的場景中,數據定位是指通過特定的標識符和索引快速定位到需要操作的數據,以提高查詢效率和保證數據的一致性。對於購物車系統而言,數據定位的關鍵在於如何唯一確定用户購物車中的商品,並保證在高效檢索的同時避免併發問題。下面我將詳細説明如何通過不同方式進行數據定位: 一、通過主鍵和外鍵實現數據庫數據定位 在購物車場景中,用户ID和商品ID是兩個核心的標識符,用於唯一
Nickname 威哥愛編程
大家好,我是 V 哥。使用EasyExcel進行大數據量導出時容易導致內存溢出,特別是在導出百萬級別的數據時。你有遇到過這種情況嗎,以下是V 哥整理的解決該問題的一些常見方法,分享給大家,歡迎一起討論: EasyExcel大數據量導出常見方法 1. 分批寫入 EasyExcel支持分批寫入數據,可以將數據分批加載到內存中,分批寫入Excel文件,避免一次性將大量數據加載到內存中。 示例代碼:
Nickname 威哥愛編程
大家好,我是 V哥。掃碼登錄是個很普遍的功能,通過與公眾號聯動實現掃碼登錄功能,要怎麼做呢,V 哥整理了以下步驟和代碼,供你參考。這裏假設你已經有一個Java後端應用,並且微信開發者平台的配置也已經完成。(相信你可以根據微信開放平台的操作進行)整個流程包括二維碼生成、掃碼後獲取微信用户信息、並將用户登錄狀態返回到你的應用中。 1. 微信公眾號掃碼登錄流程 申請掃碼登錄權限:在微信開放平台申請掃
Nickname 威哥愛編程
在開發項目的時候,我們經常會遇到數據同步的場景。例如將開發環境的數據庫表同步到測試環境,將MySQL中的數據同步到ES中。今天給大家分享一款好用的數據同步工具DBSyncer,自帶可視化界面,希望對你有所幫助! 簡介 DBSyncer是一款開源的數據同步工具,支持MySQL、Oracle、PostgreSQL、Elasticsearch(ES)、Kafka、File等同步場景,目前在Gitee上已
Nickname macrozheng
引言 在Java多線程編程中,線程池是提高性能和資源利用率的常用工具。然而,當父子任務使用同一線程池時,可能導致潛在的死鎖問題。本文將深入分析一個實際案例,闡述為何這種設計可能引發死鎖,以及如何排查這類問題。 案例背景 考慮以下的偽代碼,展示了一個可能導致死鎖的場景: import java.util.concurrent.ExecutorService; import java.util.co
Nickname 烈香
前言 小米商城產品站之前由於歷史原因,存在着諸多問題與不便,隨着技術的快速變革,技術部中台化的建設,越來越不適用於現在快速迭代的業務需求,接下來我將以技術的視角講解我們遇到的痛點,以及解決這些痛點的思路,也就是 Phoenix 框架誕生的故事。 為啥要進行設計一個框架,其實是業務發展導向的結果,若是我們不進行設計,那麼我們會遇到如下一些問題: 在新的產品需求規劃下,無法承接大型項目,只能進行小
Nickname Meng小羽
上篇文章主要講了設計 Phoenix 框架前的遇到的問題和設計框架的思路 《 Phoenix 框架 從0到1設計業務併發框架 小米商城產品站革新之路》,本篇文章主要講一下如何設計框架的。 不死鳥併發框架,是自動構建有向圖按照深度進行構建併發組並進行併發調用結果的框架。 產品站業務靜態接口與動態接口都需要調用大量的後台服務進行獲取數據進行業務編排,而各個併發調用之間又相互存在依賴,採用併發組設計拆解
Nickname Meng小羽
背景 從 0 到 1 設計業務併發框架系列: Phoenix 框架 小米商城產品站革新之路 Phoenix 框架 怎麼組織設計一個框架 前兩篇文章已經講述了我設計框架的背景以及抽象設計的細節,今天講一下併發框架最為關鍵的併發線程池的核心設計,主要講一下在設計線程池劃分遇到的問題以及最終我採用了哪種方式實現的。 將存在依賴關係的 Task 進行劃分分組後,依次執行分組就可以拿到所有想要的結
Nickname Meng小羽
從 0 到 1 設計業務併發框架系列: Phoenix 框架 小米商城產品站革新之路 Phoenix 框架 怎麼組織設計一個框架 Phoenix 框架 併發線程池的核心設計 Phoenix 自動構建有向無環圖的業務併發框架,核心就在於不需要開發人員關心調用分層和依賴互斥的排序問題,通過算法進行自動構建、收集 Task 任務、檢測環或者依賴,最後打印併發組分層信息。 本篇文章就講解下如何構
Nickname Meng小羽
本文將介紹Java常用線程調度方法及實現原理,包括sleep、wait¬ify、join、parkunpark。 線程方法 方法 説明 start() 用於啓動線程,讓線程進入就緒狀態 ; RUNNABLE 多次調用拋 IllegalThreadStateException 異常 run() 線程運行
Nickname 字節幺零二四
ReentrantLock 依賴關係如下圖所示 非公平鎖實現原理 ReentrantLock 默認採用非公平鎖。 // ReentrantLock public ReentrantLock() { sync = new NonfairSync(); } 加鎖流程 ReentrantLock 的 lock 方法通過同步器的 lock 方法實現。 // ReentrantLock publi
Nickname 字節幺零二四
一、引言 併發編程就像是在廚房裏同時炒 10 道菜 - 看似效率提高了,但一不小心就會手忙腳亂。作為 Java 後端開發,我們經常為併發問題頭疼不已:生產環境突然卡死,線程 CPU 使用率飆升卻沒有業務進展,各種監控工具報警...而當你想復現問題時,它又像幽靈一樣"按鬧分配",讓人抓狂。 併發 BUG 難以排查的原因主要有三: 不確定性:同樣的代碼,運行 10 次可能只出現 1 次問題 複雜
Nickname 異常君
1. 併發容器的歷史 大家好,今天我們來聊一個 Java 多線程開發中繞不開的核心話題:併發容器。可能你已經發現,當我們在多線程環境中使用 HashMap、ArrayList 這些集合類時,經常會遇到ConcurrentModificationException或數據不一致的問題,這就是因為這些普通集合類不是線程安全的。 JDK 提供的傳統解決方案是Collections.synchronized
Nickname 異常君
相信大家碰到源碼一開始都是比較無從下手的🙃,不知道從哪開始閲讀,面對大量代碼暈頭轉向,索性就讀不下去了,又浪費了一次提升自己的機會😭。 我認為有一種方法,可以解決大家的困擾!那就是通過閲讀某一次開源【commit】、某一次社區【ISSUE】,從這個入口出發去閲讀源碼!! 至此,我們發現自己開始從大量堆砌的源碼中脱離開來😀。豁然開朗,柳暗花明又一村🍀。 一、前瞻 今天我們攻克的一次
Nickname 愛思考的小陳
一、Pulsar存儲架構簡析 Pulsar作為新一代MQ中間件,在底層架構設計上充分貫徹了存算分離的思想,broker與Bookeeper兩個組件獨立部署,前者負責流量的調度、聚合、計算,後者負責數據的存儲,這也契合了雲原生下k8s大行其道的時代背景。Bookeeper又名Bookie ,是一個單獨的存儲引擎。在組件關係上,broker深度依賴Bookie,內部集成了 Bookie的client端
Nickname 得物技術
Spring WebFlux 介紹 Spring WebFlux 是 Spring Framework 5.0 版本引入的一個響應式 Web 框架,它與 Spring MVC 並存,提供了一種全新的編程範式,支持異步非阻塞的 Web 應用開發。WebFlux 完全基於響應式編程模型,支持 Reactive Streams 規範,可以在諸如 Netty、Undertow 以及 Servlet 3.1
Nickname 威哥愛編程
打開 Maven倉庫,左邊選項欄排在第一的就是測試框架與工具,今天的文章,V 哥要來聊一聊程序員必備的測試框架JUnit 的源碼實現,整理的學習筆記,分享給大家。 有人説,不就一個測試框架嘛,有必要去了解它的源碼嗎?確實,在平時的工作中,我們只要掌握如何使用 JUnit 框架來幫我們測試代碼即可,搞什麼源碼,相信我,只有看了 JUnit 框架的源碼,你才會讚歎,真是不愧是一款優秀的框架,它的源碼
Nickname 威哥愛編程
引言 正如文章標題,本文重點在於剖析ThreadLocal的源碼,先對ThreadLocal下定義 ThreadLocal是線程級別的私有變量 即使你沒有使用過ThreadLocal也可以閲讀,本文會從ThreadLocal最基本的使用入手,結合源碼及圖片由淺入深地分享我在學習ThreadLocal源碼中的收穫和理解,希望對你有幫助. 一、初識ThreadLocalMap 1.1 ThreadLo
Nickname Andy_Shawshank
在 Elasticsearch 中,分片的數量在創建索引時就已經設置好了,所以在已經創建的索引中增加分片是不可能的。這是因為 Elasticsearch 在創建索引時,會根據分片的數量把數據分佈到不同的節點上,如果在創建索引後改變分片的數量,那麼數據的分佈就會出問題,這是 Elasticsearch 設計上的一個決定。 儘管不能直接更改已存在的索引的分片數,但我們可以通過重新索引(reindex)
Nickname 註銷
IDEA插件“MPVP(Maven)”改名為“Maven With Me(MPVP)”啦,2.2.X.1全新升級~ 🌟IDEA 插件Maven With Me(MPVP)是什麼? Maven項目版本插件,可用於版本快速傻瓜式升級及項目版本展示和項目版本搜索. ✨核心功能 1️⃣支持maven項目版本快速升級/回退 無論是快照版還是release版,輸入後提交一鍵輕鬆幫您搞定版本值升級或回退(再也
Nickname 新程快咖員
👨💻Java 開發小夥伴們,在使用 IDEA 進行 Maven 項目開發時,是不是常被繁瑣操作困擾?別擔心,MPVP插件來拯救我們啦! 🌟IDEA 插件Maven With Me(MPVP)是什麼? Maven項目版本插件,可用於版本快速傻瓜式升級及項目版本展示和項目版本搜索. ✨核心功能 1️⃣支持maven項目版本快速升級/回退 無論是快照版還是release版,輸入後提交一鍵輕鬆幫您
Nickname 新程快咖員