2014-05-16 12 views
6

Tôi đang cố triển khai consul để khám phá dịch vụ và tôi gặp sự cố với hai điều: kết nối với máy chủ DNS tùy chỉnh và định dạng yêu cầu net.LookupSRV() của tôi.Tôi có thể đọc các bản ghi SRV lãnh sự trong đơn xin đi của tôi bằng cách nào?

Dưới đây là những gì tôi đang cố gắng để nhìn lên từ bên trong ứng dụng đi của tôi:

$ 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 

và đây là mã có liên quan. (Tôi biết đó là sai, nhưng chỉ để bạn có thể thấy những gì tôi đang cố gắng để làm)

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

và đầu ra:

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

Bất kỳ trợ giúp sẽ được đánh giá cao! cảm ơn

+0

Đây là bài đăng trên blog tôi đã viết phác thảo những gì tôi đã đưa ra: http://txt.fliglio.com/2014/05/encapsulated-services-with-consul-and-confd/ Và nguyên mẫu thư viện đi tôi đã bắt đầu để giải quyết vấn đề này (bằng cách sử dụng đề xuất từ ​​câu trả lời được chấp nhận của tôi) https://github.com/benschw/consul-clb-go –

Trả lời

2

Cố gắng sử dụng công cụ sắc bén hơn như gói github.com/miekg/dns. Lần cuối cùng tôi nhìn vào nó, nó cho phép kiểm soát hầu như tất cả các bit của thiết lập phía máy khách để thực hiện phân giải DNS.

+0

Tôi đang chơi với điều này, nhưng tôi hy vọng có một giải pháp được nướng nhiều hơn là giải thích bằng tay/phân tích cú pháp phản hồi dns. Bất kỳ ý tưởng? –

+0

@benschwartz, tại sao lại là thủ công? Thư viện tôi liên kết để làm mọi thứ để mã hóa và gửi các truy vấn DNS và nhận và phân tích các câu trả lời cho chúng. Đi sâu hơn một cấp trong trường hợp của bạn là tốt bởi vì trong trường hợp phổ biến, máy khách DNS không quan tâm đến các thiết lập máy chủ DNS * không chuẩn: nó chỉ yêu cầu trình phân giải hệ thống thực hiện truy vấn cho nó; đó là những gì mà máy khách DNS từ thư viện chuẩn thực hiện, và điều này bao gồm 90% các trường hợp sử dụng. – kostix

+0

Có cách nào tốt hơn để phân tích mảng Hỏi & Đáp từ một yêu cầu hơn là sử dụng các công cụ chuỗi như tách không? –

0

Mặc dù điều này không trả lời cho câu hỏi chính xác của bạn, tôi thấy đây là cách dễ dàng hơn để truy cập dữ liệu dịch vụ cho các ứng dụng trong lĩnh vực xanh.

Đó là khá dễ dàng để gọi API HTTP với 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)) 
} 

Các vấn đề cơ bản của API HTTP được diễn tả trong các Services Guide.

Các vấn đề liên quan