今天,我们继续完善go kit ;今天添加两个小模块
一:优雅退出程序,为将来的consul使用做铺垫
二:router 路由的拆分
我们首先看一:优雅的推出程序,其实这和不能算是kit里的功能。这个做法在其他程序中,也是可行的,在这就简单的拿出来,简单一说,直接配置使用:
如下就是配置完成的main 方法,在程序结束运行时,可以监听到,但是有个问题是debug的环境下,好像监听不到,大家可以试试
import (
"fmt"
goKitHttp "github.com/go-kit/kit/transport/http"
"github.com/gorilla/mux"
"github.com/sirupsen/logrus"
. "goKit/endpoint"
. "goKit/transport"
"net/http"
"os"
"os/signal"
"syscall"
)
func main() {
r := mux.NewRouter()
getCode := goKitHttp.NewServer(GenVcEndpoint(),
DecodeVcRequest, EncodeVcResponse)
r.Methods("Get").Path(`/getName/{uid:\d+}`).Handler(getCode)
errChan := make(chan error)
go (func() {
err := http.ListenAndServe(":9090", r)
if err != nil {
logrus.Error(err)
errChan <- err
}
})()
// 监听,服务注销
go (func() {
sigChannel := make(chan os.Signal)
signal.Notify(sigChannel, syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP, syscall.SIGCONT)
errChan <- fmt.Errorf("%s", <-sigChannel)
})()
getErr := <-errChan
fmt.Println(getErr)
}
这个地方 可以监听好多的信号,大家有兴趣可以在研究一下
SIGABRT = Signal(0x6)
SIGALRM = Signal(0xe)
SIGBUS = Signal(0xa)
SIGCHLD = Signal(0x14)
SIGCONT = Signal(0x13)
SIGEMT = Signal(0x7)
SIGFPE = Signal(0x8)
SIGHUP = Signal(0x1)
SIGILL = Signal(0x4)
SIGINFO = Signal(0x1d)
SIGINT = Signal(0x2)
SIGIO = Signal(0x17)
SIGIOT = Signal(0x6)
SIGKILL = Signal(0x9)
SIGPIPE = Signal(0xd)
SIGPROF = Signal(0x1b)
SIGQUIT = Signal(0x3)
SIGSEGV = Signal(0xb)
SIGSTOP = Signal(0x11)
SIGSYS = Signal(0xc)
SIGTERM = Signal(0xf)
SIGTRAP = Signal(0x5)
SIGTSTP = Signal(0x12)
SIGTTIN = Signal(0x15)
SIGTTOU = Signal(0x16)
SIGURG = Signal(0x10)
SIGUSR1 = Signal(0x1e)
SIGUSR2 = Signal(0x1f)
SIGVTALRM = Signal(0x1a)
SIGWINCH = Signal(0x1c)
SIGXCPU = Signal(0x18)
SIGXFSZ = Signal(0x19)
好了好了,简单的配置使用,就如图所示了。
我们继续做,router的拆分
都是简单的项目整理,但是这些整理有时不得不做的,因为整理之后,开发起来会更加顺手
1.我们先创建一个文件夹
然后,创建个文件 http.go
为什么会有两个空文件,在这只是展示,我的想发是http请求的路由放到一个文件中,grpc的请求放到另一个文件中,这样的在开发的过程中,也是显而易见的,维护起来也是比较方便的
好,我们继续~~
http.go文件中代码如下
import (
goKitHttp "github.com/go-kit/kit/transport/http"
"github.com/gorilla/mux"
. "goKit/endpoint"
. "goKit/transport"
)
func ServiceForHttp(r *mux.Router) {
getCode := goKitHttp.NewServer(GenVcEndpoint(),
DecodeVcRequest, EncodeVcResponse)
r.Methods("Get").Path(`/getName/{uid:\d+}`).Handler(getCode)
}
然后,mian 方法中,也需要进行修改
import (
"fmt"
"github.com/gorilla/mux"
"github.com/sirupsen/logrus"
"goKit/router"
"net/http"
"os"
"os/signal"
"syscall"
)
func main() {
r := mux.NewRouter()
router.ServiceForHttp(r)
errChan := make(chan error)
go (func() {
err := http.ListenAndServe(":9090", r)
if err != nil {
logrus.Error(err)
errChan <- err
}
})()
// 监听,服务注销
go (func() {
sigChannel := make(chan os.Signal)
signal.Notify(sigChannel, syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP, syscall.SIGCONT)
errChan <- fmt.Errorf("%s", <-sigChannel)
})()
getErr := <-errChan
fmt.Println(getErr)
}
那这样,基本上,这两项 就是基本完成了
下面是代码所在位置,有兴趣的可以拉去共同探讨一下
https://gitee.com/weishunuan_163com/go