ActiveMQ cluster and master-slave

For example:
Suppose there are 3 broker nodes, namely 61616, 61618, 61620, of which 61616 and 61618 form master and slave nodes, and 61616 (or 61618) and 61620 form a cluster.
61616 and 61618 use jdbc persistence, 61620 use kahaDB.

Mixed configuration in this way: to better understand the difference between master-slave and cluster, 61616 and 61618 only have one broker to provide services at the same time, while the cluster is providing services at the same time, and messages flow between the nodes of the cluster.

61616 configuration:

<beans
  xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
        http://activemq.apache.org/schema/core 
        http://activemq.apache.org/schema/core/activemq-core.xsd">
  
  <broker useJmx="false" brokerName="jdbcBroker61616" xmlns="http://activemq.apache.org/schema/core">
    <persistenceAdapter>
       <jdbcPersistenceAdapter dataDirectory="${activemq.base}/data" dataSource="#mysql-ds"/>
    </persistenceAdapter>

    <networkConnectors>
      <networkConnector uri="multicast://default"
        dynamicOnly="true" 
        networkTTL="3" 
        prefetchSize="1" 
        decreaseNetworkConsumerPriority="true" />
    </networkConnectors>
        
    <transportConnectors>
       <transportConnector name="openwire" uri="tcp://0.0.0.0:61616" discoveryUri="multicast://default"/>
    </transportConnectors>
  </broker>

  <!-- 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://192.168.40.8:3306/db_zhang?relaxAutoCommit=true"/>
    <property name="username" value="root"/>
    <property name="password" value="root"/>
    <property name="maxActive" value="200"/>
    <property name="poolPreparedStatements" value="true"/>
  </bean>
</beans>

61618 configuration:

<beans
  xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
                http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                http://activemq.apache.org/schema/core 
                http://activemq.apache.org/schema/core/activemq-core.xsd">
  
  <broker useJmx="false" brokerName="jdbcBroker61618" xmlns="http://activemq.apache.org/schema/core">
    <persistenceAdapter>
       <jdbcPersistenceAdapter dataDirectory="${activemq.base}/data" dataSource="#mysql-ds"/>
    </persistenceAdapter>
    <networkConnectors>
      <networkConnector uri="multicast://default"
        dynamicOnly="true" 
        networkTTL="3" 
        prefetchSize="1" 
        decreaseNetworkConsumerPriority="true" />
    </networkConnectors>
        
    <transportConnectors>
       <transportConnector name="openwire" uri="tcp://0.0.0.0:61618" discoveryUri="multicast://default"/>
    </transportConnectors>
  </broker>
 
  <!-- 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://192.168.40.8:3306/db_zhang?relaxAutoCommit=true"/>
    <property name="username" value="root"/>
    <property name="password" value="root"/>
    <property name="maxActive" value="200"/>
    <property name="poolPreparedStatements" value="true"/>
  </bean>
</beans>

61620 configuration:

<beans
  xmlns="http://www.springframework.org/schema/beans"
  xmlns:amq="http://activemq.apache.org/schema/core"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
  http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd   
  http://activemq.apache.org/camel/schema/spring http://activemq.apache.org/camel/schema/spring/camel-spring.xsd">

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations" value="classpath:mq.properties"/>
    </bean>

    <broker xmlns="http://activemq.apache.org/schema/core" brokerName="dynamic-broker2" dataDirectory="${activemq.base}/data">

        <!-- Destination specific policies using destination names or wildcards -->
        <destinationPolicy>
            <policyMap>
                <policyEntries>
                    <policyEntry queue=">" producerFlowControl="true" memoryLimit="20mb">
                        <deadLetterStrategy>
                          <individualDeadLetterStrategy queuePrefix="DLQ." useQueueForQueueMessages="true" />
                        </deadLetterStrategy>
                    </policyEntry>
                    <policyEntry topic=">" producerFlowControl="true" memoryLimit="20mb">
                    </policyEntry>
                </policyEntries>
            </policyMap>
        </destinationPolicy>

        <!-- Use the following to configure how ActiveMQ is exposed in JMX -->
        <managementContext>
            <managementContext createConnector="true" connectorPort="1100"/>
        </managementContext>

        <!--
            Configure network connector to use multicast protocol
            For more information, see
            
            http://activemq.apache.org/multicast-transport-reference.html
        -->
        <networkConnectors>
          <networkConnector uri="multicast://default"
            dynamicOnly="true" 
            networkTTL="3" 
            prefetchSize="1" 
            decreaseNetworkConsumerPriority="true" />
        </networkConnectors>
        
    
        <persistenceAdapter>
            <kahaDB directory="${activemq.base}/data/dynamic-broker2/kahadb" />
        </persistenceAdapter>
        
        <!--  The maximum amount of space the broker will use before slowing down producers -->
        <systemUsage>
            <systemUsage>
                <memoryUsage>
                    <memoryUsage limit="20 mb"/>
                </memoryUsage>
                <storeUsage>
                    <storeUsage limit="1 gb" name="foo"/>
                </storeUsage>
                <tempUsage>
                    <tempUsage limit="100 mb"/>
                </tempUsage>
            </systemUsage>
        </systemUsage>

        <!-- 
            The transport connectors ActiveMQ will listen to
            Configure discovery URI to use multicast protocol
        -->
        <transportConnectors>
            <transportConnector name="openwire" uri="tcp://0.0.0.0:61620" discoveryUri="multicast://default" />
        </transportConnectors>

    </broker>
</beans>

One of the producer configurations:

new ActiveMQConnectionFactory("failover:(tcp://localhost:61616,tcp://localhost:61618)");

One of the consumer configuration:

new ActiveMQConnectionFactory("tcp://localhost:61620");

The producer sends messages to (61616 master, 61618 slave), and the consumer can get messages from 61620. When 61616 goes offline, 61618 will become the master and form a cluster with 61620.

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325039474&siteId=291194637