9

サービス ディスカバリ用にconsulを実装しようとしていますが、カスタム DNS サーバーへの接続とnet.LookupSRV()リクエストのフォーマットという 2 つの点で問題があります。

goアプリ内から検索しようとしているものは次のとおりです。

$ dig @127.0.0.1 -p 8600 serviceb.service.consul SRV

; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> @127.0.0.1 -p 8600 serviceb.service.consul SRV
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4511
;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;serviceb.service.consul.   IN  SRV

;; ANSWER SECTION:
serviceb.service.consul. 0  IN  SRV 1 1 80 az1-serviceb1.node.dc1.consul.
serviceb.service.consul. 0  IN  SRV 1 1 80 az2-serviceb2.node.dc1.consul.

;; ADDITIONAL SECTION:
az1-serviceb1.node.dc1.consul. 0 IN A   10.6.41.22
az2-serviceb2.node.dc1.consul. 0 IN A   10.6.41.20

;; Query time: 6 msec
;; SERVER: 127.0.0.1#8600(127.0.0.1)
;; WHEN: Fri May 16 15:09:28 2014
;; MSG SIZE  rcvd: 275

ここに関連するコードがあります。(私はそれが間違っていることを知っていますが、私が何をしようとしているのかを見ることができるように)

cname, addrs, err := net.LookupSRV("serviceb", "service", "consul")
log.Printf("%+v %+v %+v", cname, addrs, err)

そして出力:

2014/05/16 15:24:31  [] lookup _serviceb._service.consul: no such host

どんな助けでも大歓迎です!ありがとう

4

4 に答える 4

4

github.com/miekg/dnsパッケージなどのより鋭利なツールを使用してみてください。前回見たときは、DNS 解決を行うために、クライアント側のセットアップのほぼすべてのビットを制御することができました。

于 2014-05-16T16:21:00.177 に答える
1

これはあなたの正確な質問には答えませんが、グリーンフィールド アプリのサービス データにアクセスするより簡単な方法だと思います。

以下を使用して HTTP API を呼び出すのは非常に簡単net/httpです。

package main
import (
    "fmt"
    "net/http"
    "io/ioutil"
)
func main() {
    resp, _ := http.Get("http://localhost:8500/v1/catalog/service/serviceb")
    body, _ := ioutil.ReadAll(resp.Body)
    fmt.Print(string(body))
}

HTTP API の基本は、サービス ガイドに記載されています。

于 2014-10-14T18:35:52.077 に答える