1. 程式人生 > >dubbo迴圈依賴的解決

dubbo迴圈依賴的解決

開發時遇到一個dubbo子系統之間迴圈呼叫的問題,糾結了好幾天,今天發現官網是這麼說的:

啟動時檢查

(+) (#)

Dubbo預設會在啟動時檢查依賴的服務是否可用,不可用時會丟擲異常,阻止Spring初始化完成,以便上線時,能及早發現問題,預設check=true。
如果你的Spring容器是懶載入的,或者通過API程式設計延遲引用服務,請關閉check,否則服務臨時不可用時,會丟擲異常,拿到null引用,如果check=false,總是會返回引用,當服務恢復時,能自動連上。

可以通過check="false"關閉檢查,比如,測試時,有些服務不關心,或者出現了迴圈依賴,必須有一方先啟動。

關閉某個服務的啟動時檢查:(沒有提供者時報錯)

<dubbo:reference interface="com.foo.BarService" check="false" />

關閉所有服務的啟動時檢查:(沒有提供者時報錯)

<dubbo:consumer check="false" />

關閉註冊中心啟動時檢查:(註冊訂閱失敗時報錯)

<dubbo:registry check="false" />

也可以用dubbo.properties配置:

dubbo.properties
dubbo.reference.com.foo.BarService.check=false dubbo.reference.check=false dubbo.consumer.check=false dubbo.registry.check=false

也可以用-D引數:

java -Ddubbo.reference.com.foo.BarService.check=false java -Ddubbo.reference.check=false java -Ddubbo.consumer.check=false java -Ddubbo.registry.check=false
注意區別
  • dubbo.reference.check=false,強制改變所有reference的check值,就算配置中有宣告,也會被覆蓋。
  • dubbo.consumer.check=false,是設定check的預設值,如果配置中有顯式的宣告,如:<dubbo:reference check="true"/>,不會受影響。
  • dubbo.registry.check=false,前面兩個都是指訂閱成功,但提供者列表是否為空是否報錯,如果註冊訂閱失敗時,也允許啟動,需使用此選項,將在後臺定時重試。

引用預設是延遲初始化的,只有引用被注入到其它Bean,或被getBean()獲取,才會初始化。
如果需要飢餓載入,即沒有人引用也立即生成動態代理,可以配置:

<dubbo:reference interface="com.foo.BarService" init="true" />

mark一下,以備後用。


相關推薦

dubbo迴圈依賴解決

開發時遇到一個dubbo子系統之間迴圈呼叫的問題,糾結了好幾天,今天發現官網是這麼說的: 啟動時檢查 (+) (#) Dubbo預設會在啟動時檢查依賴的服務是否可用,不可用時會丟擲異常,阻止Spring初始化完成,以便上線時,能及早發現問題,預設check=

Spring Bean中迴圈依賴解決方案

在迴圈依賴是指在A中引用B,B中引用C,而C中引用A,容器建立物件時會出現死迴圈。相關解決方案如下: 1 選擇其一使其延遲載入,然後從上下文中獲取AService型別的bean即可。 現有AService 和BService,都在對方bean中注入,導致初始化時迴圈初始報錯,解決方案就是

SpringData JPA框架使用時出現JSON迴圈依賴解決方案

發現問題出在轉換JSON的環節,出現死迴圈,如下為解決方法 Book類上面放入 @JsonIgnoreProperties(ignoreUnknown = true, value = {"hibern

Spring Bean 迴圈依賴解決方案

由於service層互相呼叫,一下子沒有什麼好的拆分方案,所以先解決迴圈依賴問題。 現有AService 和BService,都在對方bean中注入,導致初始化時迴圈初始報錯,解決方案就是選擇其一使其延遲載入。 用配置方式只要將其一設定lazy-init,具

Spring之迴圈依賴解決

開發十年,就只剩下這套架構體系了! >>>   

Spring中的迴圈依賴解決詳解

前言         說起Spring中迴圈依賴的解決辦法,相信很多園友們都或多或少的知道一些,但當真的要詳細說明的時候,可能又沒法一下將它講清楚。本文就試著儘自己所能,對此做出一個較詳細的解讀。另,需注意一點,下文中會出現類的例項化跟類的初始化兩個短語,為怕園友迷惑,

解決requirejs迴圈依賴問題

一.問題:A依賴B(即A引用B且呼叫B中的方法),B也依賴A,這即為迴圈依賴,那麼,當B呼叫A中的方法時,會發現A為undefined,這就是迴圈依賴導致的問題。 二.解決迴圈依賴的方法: 1.用scope模式傳參方式; 2.用pubsub解耦; 3.用require(“A”)的方式

Spring原始碼初探-IOC(4)-Bean的初始化-迴圈依賴解決

前言 在實際工作中,經常由於設計不佳或者各種因素,導致類之間相互依賴。這些類可能單獨使用時不會出問題,但是在使用Spring進行管理的時候可能就會丟擲BeanCurrentlyInCreationException等異常 。當丟擲這種異常時表示Spring解決不了該迴圈依賴,本文將簡要說明Spr

老師,Spring 是怎麼解決迴圈依賴的?

前言 你可能會有如下問題: 1、想看Spring原始碼,但是不知道應當如何入手去看,對整個Bean的流程沒有概念,碰到相關問題也沒有頭緒如何下手 2、看過幾遍原始碼,沒辦法徹底理解,沒什麼感覺,沒過一陣子又忘了 本文將結合實際問題,由問題引出原始碼,並在解釋時會盡量以圖表的形式讓你一步

spring迴圈依賴是怎麼解決的?

spring中的迴圈依賴會有3種情況: 1.構造器迴圈依賴     構造器的迴圈依賴是不可以解決的,spring容器將每一個正在建立的bean識別符號放在一個當前建立bean池中,在建立的過程一直在裡面,如果在建立的過程中發現已經存在這個池裡面了,這時就會丟擲異常表示迴圈依賴了。 2.setter迴圈依賴  

Spring構造注入迴圈依賴(BeanCreationException/BeanCurrentlyInCreationException)及其解決辦法

1.什麼是迴圈依賴 在說什麼是迴圈依賴之前,不妨使用程式碼,先丟擲這個異常,bug重現一下。 工程目錄如下: 注意: 本文中只需要一個配置檔案:spring.xml,兩個bean:User和Role

Spring-bean的迴圈依賴以及解決方式

版權宣告:本文為博主原創文章,未經博主允許不得轉載。    https://blog.csdn.net/u010853261/article/details/77940767 本文主要是分析Spring bean的迴圈依賴,以及Spring的解決方式。 通過這種解決方式,我們

解決由於Idea/Java迴圈依賴造成的報錯

1.環境: Idea,Jrebel+Tomcat環境,Maven專案,分了模組。 2.報錯: 今天用熱部署的時候,jrebel重新編譯程式碼的時候出了一個錯誤:Error:java: Annotation processing is not supported for module cy

解決Maven專案相互依賴/迴圈依賴/雙向依賴的問題

很​多​時​候​隨​著​項​目​的​膨​脹​,模​塊​會​越​來​越​多​,如​果​設​計​上​ 稍​有​不​慎​就​會​出​現​模​塊​之​間​相​互​依​賴​的​情​況​。​這​對​於​使​用​Maven的​用​戶​是​比​較​痛​苦​的​,因​為​出​現​模​塊​之​

解決eclipse專案編譯不成功-迴圈依賴的問題

迴圈依賴,指的是多個專案之間相互引用,導致專案之間存在迴圈引用。Ecplise預設編譯器檢測到迴圈依賴的專案是不會被編譯的。所以一定要將迴圈依賴設定為警告,讓專案順利編譯通過。 如何發現編譯不通過? 通過兩個方面可以發現專案是否編譯通過:1、查詢project檢視中專案圖示,如果專案圖示上有紅色

(一)Spring IoC原始碼-3.其他特性的實現原理-02迴圈依賴解決

引言:迴圈依賴就是N個類中迴圈巢狀引用,如果在日常開發中我們用new 物件的方式發生這種迴圈依賴的話程式會在執行時一直迴圈呼叫,直至記憶體溢位報錯。下面說一下Spring是如果解決迴圈依賴的。 第一種:構造器引數迴圈依賴 Spring容器會將每一個正

Spring原始碼解析-6、spring單例如何解決迴圈依賴

什麼叫迴圈依賴 迴圈依賴即兩個及以上的bean物件互相持有對方的引用,最終形成一個閉環。 spring如何處理正在建立的Bean Spring容器會將每一個正在建立的Bean 識別符號放在一個“當前建立Bean池”中,Bean識別符號在建立過程中將一直保持 在這個池中,因此如果在

Spring 依賴注入三種方式的實現,及迴圈依賴問題的解決(原始碼+XML配置)

搬磚啦,搬磚啦,這幾天在看Spring相關的書,下面給大家分享一下這幾天的心得與收穫,Go Go Go! Spring支援兩種依賴注入方式,分別是屬性注入,建構函式注入。除此之外,Spring還支援工廠注入方式。 接下來,我們一起來了解一下Spring的幾種注入方式。

解決maven模組迴圈依賴的問題

隨​著​項​目​的不斷的堆業務脹​,模​塊​會越​來​越​多​,如​果​設​計​上​ 稍​有​不​慎​就​會​出​現​模​塊​之​

spring 解決迴圈依賴

在看面試題的時候突然想到spring 是怎麼解決相互依賴的問題的?模糊不清,趕緊記錄下來。 一定要將bean的例項化(beanF