JDBC 主從

功能 > 叢集 > 主從 > JDBC 主從

JDBC 主從

首次在 ActiveMQ Classic 4.1 版中支援

如果您僅使用純 JDBC 而不使用高效能日誌,那麼您通常會將資料庫作為您的單一故障點和持久性引擎。 如果您沒有非常高的效能需求,這種方法可能很有意義,因為您有一個單一的持久性引擎可以備份和管理等等。

啟動

當僅使用 JDBC 作為資料來源時,您可以使用主從方法,根據此圖表所示運行任意數量的代理程式。 啟動時,一個主節點會在代理程式資料庫中取得獨佔鎖定 - 所有其他代理程式都是從節點,並暫停等待獨佔鎖定。

客戶端應使用 容錯轉移傳輸 來連線到可用的代理程式。 例如,使用類似以下的 URL

failover:(tcp://broker1:61616,tcp://broker2:61616,tcp://broker3:61616)

只有主節點代理程式會啟動其傳輸連接器,因此客戶端只能連線到主節點。

主節點故障

如果主節點失去與資料庫的連線或失去獨佔鎖定,它會立即關閉。 如果主節點關閉或發生故障,其他從節點之一會取得鎖定,因此拓撲會切換到下圖所示

其他從節點之一會立即取得資料庫上的獨佔鎖定,然後開始成為主節點,啟動其所有傳輸連接器。

客戶端會失去與已停止主節點的連線,然後容錯轉移傳輸會嘗試連線到可用的代理程式 - 其中唯一可用的代理程式是新的主節點。

主節點重新啟動

您可以隨時重新啟動加入叢集的其他代理程式,並在主節點關閉或發生故障時,以從節點身分開始等待成為主節點。 因此,在重新啟動舊主節點後,會建立下列拓撲…

設定 JDBC 主從

預設情況下,如果您使用 以避免高效能日誌,您預設會使用 JDBC 主從。 您只需要運行多個代理程式並將客戶端 URI 指向它們即可取得主/從。 這樣做是因為它們都會嘗試在資料庫中的共用表格上取得獨佔鎖定,而且只有一個會成功。

以下範例示範如何在 JDBC 主從模式下設定 ActiveMQ Classic 代理程式

<beans>

  <!-- Allows us to use system properties as variables in this configuration file -->
  <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
  
  <broker xmlns="https://activemq.dev.org.tw/schema/core">

    <destinationPolicy>
      <policyMap><policyEntries>
        
          <policyEntry topic="FOO.>">
            <dispatchPolicy>
              <strictOrderDispatchPolicy />
            </dispatchPolicy>
            <subscriptionRecoveryPolicy>
              <lastImageSubscriptionRecoveryPolicy />
            </subscriptionRecoveryPolicy>
          </policyEntry>

      </policyEntries></policyMap>
    </destinationPolicy>
  
  
    <persistenceAdapter>
        <jdbcPersistenceAdapter dataDirectory="${activemq.base}/activemq-data"/>

        <!-- 
        <jdbcPersistenceAdapter dataDirectory="activemq-data" dataSource="#oracle-ds"/>
        --> 
    </persistenceAdapter>
  
    <transportConnectors>
       <transportConnector name="default" uri="tcp://127.0.0.1:61616"/>
    </transportConnectors>
    
  </broker>
  
  <!--  This xbean configuration file supports all the standard spring xml configuration options -->
  
  <!-- Postgres DataSource Sample Setup -->
  <!-- 
  <bean id="postgres-ds" class="org.postgresql.ds.PGPoolingDataSource">
    <property name="serverName" value="localhost"/>
    <property name="databaseName" value="activemq"/>
    <property name="portNumber" value="0"/>
    <property name="user" value="activemq"/>
    <property name="password" value="activemq"/>
    <property name="dataSourceName" value="postgres"/>
    <property name="initialConnections" value="1"/>
    <property name="maxConnections" value="10"/>
  </bean>
  -->
  
  <!-- MySql DataSource Sample Setup -->
  <!-- 
  <bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://127.0.0.1/activemq?relaxAutoCommit=true"/>
    <property name="username" value="activemq"/>
    <property name="password" value="activemq"/>
    <property name="poolPreparedStatements" value="true"/>
  </bean>
  -->  
   
  <!-- Oracle DataSource Sample Setup -->
  <!--
  <bean id="oracle-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
    <property name="url" value="jdbc:oracle:thin:@localhost:1521:AMQDB"/>
    <property name="username" value="scott"/>
    <property name="password" value="tiger"/>
    <property name="poolPreparedStatements" value="true"/>
  </bean>
  -->
      
  <!-- Embedded Derby DataSource Sample Setup -->
  <!-- 
  <bean id="derby-ds" class="org.apache.derby.jdbc.EmbeddedDataSource">
    <property name="databaseName" value="derbydb"/>
    <property name="createDatabase" value="create"/>
  </bean>
  -->  

</beans>

Apache、ActiveMQ、Apache ActiveMQ、Apache 羽毛標誌和 Apache ActiveMQ 專案標誌是 Apache 軟體基金會的商標。 版權所有 © 2024,The Apache Software Foundation。根據 Apache License 2.0 授權。