2015-02-24 138 views
0

任何人都可以解釋如何使用駱駝負載平衡jdbc端點? 如果我的第一個數據庫關閉,它需要自動選擇第二個數據庫。駱駝負載平衡jdbc端點

我的路線建設者:

 from("direct:jdbcisuserexists").setBody(simple("${body}")) 
      .loadBalance() 
      .failover() 
      .to("jdbc:dataSource?resetAutoCommit=false&outputType=SelectList","jdbc:dataSource1?resetAutoCommit=false&outputType=SelectList"); 
+0

不要在駱駝上這樣做。應該爲數據庫配置熱故障轉移/高可用性,即在MSSQL上它們可以在鏡像集中。你指向一個地址,這是透明處理的。首先讓您的架構進入HA解決方案,然後轉到其他細節。 – Namphibian 2015-02-24 21:23:41

+0

@Nphphibian感謝您的評論。但我們正在使用nosql(Cassandra數據庫),其中不建議進行負載均衡。所以我們用駱駝嘗試它。 – asr 2015-02-25 08:18:28

+0

我的建議然後是創建兩條路線。如果第一個失敗,則將消息發送給第二個,然後在那裏處理。我會看看我是否可以發表一個答案。 – Namphibian 2015-02-25 14:58:01

回答

0

嘗試以下操作:

from("direct:jdbcisuserexists") 
    .setBody(simple("${body}")) 
    .loadBalance().failover() 
     .to("jdbc:dataSource?resetAutoCommit=false&outputType=SelectList") 
     .to("jdbc:dataSource1?resetAutoCommit=false&outputType=SelectList") 
    .end(); 

這應該工作,雖然它讓人感覺有點過於寬泛。 DSL元素將適用於所有例外情況。您可以將其縮小到特定的例外,例如通過failover(SQLException.class),但不能保證此異常是由數據庫中斷(可能是SQL語法中的某些內容)引起的。

更好的選擇(如@Namphibian所暗示的)將有兩條路由,每條路由都調用它自己的JDBC端點。每條路徑都可以選擇性地檢查SQLException實際上是否由於停機而導致(例如通過檢查特定於DB的故障代碼的錯誤消息)。要回退到第二個數據庫失敗,您可以使用動態路由器(https://camel.apache.org/dynamic-router.html)。