Scala客户端不会自动故障切换到hornetq群集

Scala客户端不会自动故障切换到hornetq群集,scala,jms,hornetq,Scala,Jms,Hornetq,我们有一个Scala客户机,它连接到jboss EAP中的HornetQ JMS,拓扑设置为与两台服务器合并 服务器A-HornetQ live服务器1和HornetQ备份服务器2 服务器B-HornetQ live Server2和HornetQ BackupServer1 当我们在java中尝试jms客户机时,当实时服务器关闭时,它会自动故障切换到备份。但是scala客户端无法进行故障切换 import javax.jms._ import java.util.{Hashtable =&g

我们有一个Scala客户机,它连接到jboss EAP中的HornetQ JMS,拓扑设置为与两台服务器合并

  • 服务器A-HornetQ live服务器1和HornetQ备份服务器2
  • 服务器B-HornetQ live Server2和HornetQ BackupServer1
  • 当我们在java中尝试jms客户机时,当实时服务器关闭时,它会自动故障切换到备份。但是scala客户端无法进行故障切换

    import javax.jms._ 
    import java.util.{Hashtable => JHashtable}
    import javax.naming._
    import java.util.Calendar
    
    
    object ConsumerSynchronous {
    
    var DEFAULT_QCF_NAME = "jms/RemoteConnectionFactory"
    var DEFAULT_QUEUE_NAME = "queue/steveTestQueue"
    var DEFAULT_URL = "remote://ip1:port1,remote://ip2:port2"
    var DEFAULT_USER = "user"
    var DEFAULT_PASSWORD =  "password123!"
    
    
    
    def main(args: Array[String]): Unit = {
    
    // parse through command line arguments
    for (i <- 0 until args.length) {
        var s = args(i).split("=")
        if(s(0) == "URL") {
          DEFAULT_URL = s(1)
          println("Overriding URL with " + DEFAULT_URL)
        }
        else if(s(0) == "QUEUE") {
          DEFAULT_QUEUE_NAME = s(1)
          println("Overring QUEUE with " + DEFAULT_QUEUE_NAME)
        }
        else {
          println("unknown argument " + s(0));
        }
    }
    
    val properties = new JHashtable[String, String]
    properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory")
    properties.put(Context.PROVIDER_URL, DEFAULT_URL)
    properties.put(Context.SECURITY_PRINCIPAL, DEFAULT_USER)
    properties.put(Context.SECURITY_CREDENTIALS, DEFAULT_PASSWORD)
    
    val ctx = new InitialContext(properties)
    println("Got InitialContext " + ctx.toString())
    
    val connectionFactory  = (ctx.lookup("jms/RemoteConnectionFactory")).asInstanceOf[QueueConnectionFactory]
    println("Got ConnectionFactory")
    val connection = connectionFactory.createQueueConnection
    println("Got connection")
    connection.start
    println("Connection started")
    
    val session: Session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE)
    println("Got session")
    val queue  = (ctx.lookup(DEFAULT_QUEUE_NAME)).asInstanceOf[Queue]
    println("Got queue")
    val consumer = session.createConsumer(queue)
    println("Got consumer")
    
    val listener = new MessageListener {
      def onMessage(message: Message) {
        message match {
          case text: TextMessage => {
              println("Received message: " + text.getText)          
          }
          case _ => {
            throw new Exception("Unhandled Message Type: " + message.getClass.getSimpleName)
          }
        }
      }
    }
    
    consumer.setMessageListener(listener)
    println("Message Listener set")
     }
    }
    
    import javax.jms.\u
    导入java.util.{Hashtable=>JHashtable}
    导入javax.naming_
    导入java.util.Calendar
    对象使用者同步{
    var DEFAULT\u QCF\u NAME=“jms/RemoteConnectionFactory”
    var DEFAULT_QUEUE_NAME=“QUEUE/steveTestQueue”
    var DEFAULT_URL=”remote://ip1:port1,remote://ip2:port2"
    var DEFAULT_USER=“USER”
    var DEFAULT_PASSWORD=“password123!”
    def main(参数:数组[字符串]):单位={
    //通过命令行参数进行解析
    为了{
    println(“收到的消息:+text.getText”)
    }
    案例=>{
    抛出新异常(“未处理的消息类型:”+Message.getClass.getSimpleName)
    }
    }
    }
    }
    consumer.setMessageListener(侦听器)
    println(“消息侦听器集”)
    }
    }