You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.4 KiB
57 lines
1.4 KiB
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"github.com/hashicorp/consul/api"
|
|
"log"
|
|
"net/http"
|
|
)
|
|
|
|
func main() {
|
|
// 处理命令行参数
|
|
addr := flag.String("addr", "127.0.0.1", "The Address for listen. Default is 127.0.0.1")
|
|
port := flag.Int("port", 8080, "The Port for listen. Default is 8080.")
|
|
flag.Parse()
|
|
|
|
// 定义业务逻辑服务,假设为产品服务
|
|
service := http.NewServeMux()
|
|
service.HandleFunc("/info", func(writer http.ResponseWriter, request *http.Request) {
|
|
_, err := fmt.Fprintf(writer, "Order Service.")
|
|
if err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
})
|
|
|
|
// 连接 consul ,作为客户端连接 consul
|
|
consulApiConfig := api.DefaultConfig()
|
|
consulApiConfig.Address = "192.168.177.131:8500"
|
|
consulClient, err := api.NewClient(consulApiConfig)
|
|
if err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
// 获取单一服务的信息
|
|
//serviceID := "redis1"
|
|
//ag, qm, err := consulClient.Agent().Service(serviceID, nil)
|
|
//if err != nil {
|
|
// log.Fatalln(err)
|
|
//}
|
|
//log.Println(ag.ID, ag.Address, ag.Port)
|
|
//log.Println(qm)
|
|
|
|
// 查询基于 filter 过滤的多个服务信息
|
|
filter := "Service==Product"
|
|
services, err := consulClient.Agent().ServicesWithFilter(filter)
|
|
if err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
for id, sev := range services {
|
|
log.Println(id, sev.Address, sev.Port)
|
|
}
|
|
|
|
// 启动监听
|
|
address := fmt.Sprintf("%s:%d", *addr, *port)
|
|
fmt.Printf("Order service is listening on %s.\n", address)
|
|
log.Fatalln(http.ListenAndServe(address, service))
|
|
}
|