2016-03-09 5 views
0

Как мы подключаемся к ActiveMQ с использованием URI с отказоустойчивым током в Go? Используя клиент Go-Stomp, я попытался под кодом и не смог подключиться.failover URI для ActiveMQ в go stomp client

if conn, err = stomp.Dial("tcp", "failover:(tcp://10.01.02.03:61613,tcp://10.04.05.06:61613)?startupMaxReconnectAttempts=2"); err != nil { 
     panic(fmt.Sprintf("Could not connect to ActiveMQ using brokerUri %v. Can not continue.", Config.Broker.URI)) 
    } 

ответ

0

Из-за отсутствия поддержки перехода на другой ресурс, должен был написать код, чтобы достичь желаемого результата.

//connect to ActiveMQ using failover approach 
    var err error 
    for _, uri := range ["10.01.02.03:61613","10.04.05.06:61613", { 
     if err = connect(uri); err == nil { 
      break 
     } 
    } 
    if conn == nil { 
     panic(fmt.Sprintf("Could not connect to ActiveMQ using brokerUri. Can not continue.")) 
    } 

func connect(brokerIp string) (err error) { 
    log.Printf("Attempting to connect to ActiveMQ node %v", brokerIp) 
    if conn, err = stomp.Dial("tcp", 
     brokerIp, 
     stomp.ConnOpt.Login(Broker.User, Broker.Password)); err != nil { 
     log.Printf("Faild to connect to ActiveMQ using %v", brokerIp) 
    } 
    if err == nil { 
     log.Printf("Successfully connected to ActiveMQ node %v", brokerIp) 
    } 
    return 
} 
0

Какое предупреждение вы принимаете? Я не считаю, что формат вашего набора правильно: The Go-Stomp циферблат использует лежащий в основе net.Dial

Func набора (сеть, адр строку, выбирает ... FUNC (* Conn) ошибка) (* Конн, ошибка) {

с, эээ: = net.Dial (сеть, адр)

основная net.Dial документации говорится

Для TCP и UDP сети, адреса имеют вид хост: порт , Если хост является буквальным адресом IPv6, он должен быть заключен в квадратные скобки, как в «[:: 1]: 80» или «[ipv6-host% zone]: 80». Функции JoinHostPort и SplitHostPort управляют адресами в этой форме. Если хост пуст, как в «: 80», предполагается локальная система.

Там нет отказоустойчивого: Синтаксис

+0

ActiveMQ имеет концепцию отказоустойчивого. http://activemq.apache.org/nms/stomp-uri-configuration.html. Я использовал URI, о котором я упомянул в вопросе для клиента Java ActiveMQ, и он отлично работает. Попытка того же в клиенте Go. Но я не нашел ссылку на использование протокола отказоустойчивости в Go-Stomp. Либо он не поддерживается, либо я могу использовать его неправильно. –

+0

NMS - это топающий клиент. Он поддерживает синтаксис отказоустойчивости. Этот инструмент обеспечивает стоп-протокол или библиотеку go-stomp. – animal