activeMQ--Failover Transport

      activeMQ可以建立长连接,网络状态的不稳定,可能随时中断连接。   

      Failover Transport是一种重新连接的机制,它工作于其它transport的上层,用于建立可靠的传输。它的配置语法允许制定任意多个复合的URI。 Failover transport会自动选择其中的一个URI来尝试建立连接。如果没有成功,那么会选择一个其它的URI来建立一个新的连接。例如:

      failover:(tcp://primary:61616,tcp://secondary:61616)?randomize=false


使用TransportListener 监控连接状态 

使用 failover,transportListener会监控到连接状态。当只用一个URI时,可以在transportInterupted事件中重建连接
ClientTransportListener.java

import org.apache.activemq.transport.TransportListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ClientTransportListener implements TransportListener {

  protected final Logger logger = LoggerFactory.getLogger(ClientTransportListener.class);

  /**
   * 对消息传输命令进行监控
   */
  @Override
  public void onCommand(Object o) {
    logger.debug("onCommand检测到服务端命令:{}", o);
  }

  /**
   * 与服务器连接发生错误
   *
   * @param error
   */
  @Override
  public void onException(IOException error) {
    logger.error("onException,与服务器连接发生错误......");
  }

  /**
   * 消息服务器连接发生中断
   */
  @Override
  public void transportInterupted() {
    logger.error("transportInterupted,与服务器连接发生中断......");
    IConnector connector = new Connector();
    connector.reConnect();
  }

  /**
   * 恢复与服务器的连接
   */
  @Override
  public void transportResumed() {
    logger.info("transportResumed,恢复与服务器连接....");
  }

}

XMessageListener.java

 ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
      userName, password, url);
    connection = connectionFactory.createConnection();
    ((ActiveMQConnection) connection).addTransportListener(new ClientTransportListener());
    //false 参数表示 为非事务型消息,后面的参数表示消息的确认类型(见4.消息发出去后的确认模式)
    session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);



你可能感兴趣的:(activeMQ--Failover Transport)