go kit (4)

今天,我们继续完善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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值