Skip to content

Instantly share code, notes, and snippets.

@billiepander
Created April 21, 2017 09:12
Show Gist options
  • Select an option

  • Save billiepander/0d5472db1ea647833813ea6213095b5e to your computer and use it in GitHub Desktop.

Select an option

Save billiepander/0d5472db1ea647833813ea6213095b5e to your computer and use it in GitHub Desktop.
package main
import (
"net/http"
httptransport "github.com/go-kit/kit/transport/http"
"os"
"github.com/go-kit/kit/log"
"github.com/go-redis/redis"
"flag"
"fmt"
"os/signal"
"syscall"
)
var client = redis.NewClient(&redis.Options{
Addr: "xxxx:xxxx",
Password: "xxxx",
DB: 0,
})
func subscribe(client *redis.Client, node string) error{
exist, err := client.SIsMember("qxxservice_set", node).Result()
if err != nil{
return err
}
if exist == true {
return nil
}
_, err = client.LPush("qxxservice_list", node).Result()
if err != nil {
return err
}
_, err = client.SAdd("qxxservice_set", node).Result()
if err != nil {
return err
}
return nil
}
func unsubscribe(client *redis.Client, node string) {
fmt.Println("unsubscribe called")
client.SRem("qxxservice_set", node).Result()
client.LRem("qxxservice_list", 0, node).Result()
}
func main() {
var (
port = flag.String("listen", ":8080", "HTTP listen address")
host = flag.String("host", "localhost", "external ip address")
)
flag.Parse()
f, _ := os.OpenFile("/home/pd/service_qxx_log", os.O_RDWR | os.O_CREATE | os.O_APPEND, 0666)
defer f.Close()
logger := log.NewLogfmtLogger(f)
var node string
fmt.Println(*host)
if *host == "localhost" {
ip, err := GetIp()
if err != nil {
panic(err)
}
node = ip + *port
} else {
node = *host + *port
}
err := subscribe(client, node)
if err != nil {
panic(err)
}
defer unsubscribe(client, node)
var svc QxxService
svc = qxxService{}
getcompanycaseHandler := httptransport.NewServer(
// Server wraps an endpoint and implements http.Handler. 分别传入的参数是endpoint.Endpoint DecodeRequestFunc EncodeResponseFunc
makeGetcompanyEndpoint(svc),
decodeGetcompanyRequest,
encodeResponse,
)
http.Handle("/getcompany", getcompanycaseHandler)
logger.Log("msg", "HTTP", "addr", *port)
go func() {
logger.Log("err", http.ListenAndServe(*port, nil))
}()
msgChan:=make(chan os.Signal, 1)
signal.Notify(msgChan,
os.Interrupt,
syscall.SIGKILL, // although you can write it here, but it not go to defer, it get killed at once
syscall.SIGHUP,
syscall.SIGINT,
syscall.SIGTERM, // the default kill $PID
syscall.SIGQUIT)
<-msgChan
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment