7.Go退出向Consuk反注册服务,优雅关闭服务
注册和反注册代码
package utils
import (
consulapi "github.com/hashicorp/consul/api"
"log"
)
var ConsulClient *consulapi.Client
func init() {
config := consulapi.DefaultConfig()
config.Address = "192.168.3.14:8500"
client, err := consulapi.NewClient(config) //创建客户端
if err != nil {
log.Fatal(err)
}
ConsulClient = client
}
func RegService() {
reg := consulapi.AgentServiceRegistration{}
reg.Name = "userservice" //注册service的名字
reg.Address = "192.168.3.14" //注册service的ip
reg.Port = 8080 //注册service的端口
reg.Tags = []string{"primary"}
check := consulapi.AgentServiceCheck{} //创建consul的检查器
check.Interval = "5s" //设置consul心跳检查时间间隔
check.HTTP = "http://192.168.3.14:8080/health" //设置检查使用的url
reg.Check = &check
err := ConsulClient.Agent().ServiceRegister(®)
if err != nil {
log.Fatal(err)
}
}
func UnRegService() {
ConsulClient.Agent().ServiceDeregister("userservice")
}
service退出时优雅反注册service
package main
import (
"fmt"
httptransport "github.com/go-kit/kit/transport/http"
mymux "github.com/gorilla/mux"
"gomicro/Services"
"gomicro/utils"
"log"
"net/http"
"os"
"os/signal"
"syscall"
)
func main() {
user := Services.UserService{}
endp := Services.GenUserEnPoint(user)
serverHandler := httptransport.NewServer(endp, Services.DecodeUserRequest, Services.EncodeUserResponse) //使用go kit创建server传入我们之前定义的两个解析函数
r := mymux.NewRouter()
//r.Handle(`/user/{uid:\d+}`, serverHandler) //这种写法支持多种请求方式
r.Methods("GET", "DELETE").Path(`/user/{uid:\d+}`).Handler(serverHandler)
r.Methods("GET").Path("/health").HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
writer.Header().Set("Content-type", "application/json")
writer.Write([]byte(`{"status":"ok"}`))
})//这种写法仅支持Get限定只能Get,DELETE请求
errChan := make(chan error)
go func() {
utils.RegService() //调用注册服务程序
err := http.ListenAndServe(":8080", r)
if err != nil {
log.Println(err)
errChan <- err
}
}()
go func() {
sigChan := make(chan os.Signal)
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
errChan <- fmt.Errorf("%s", <-sigChan)
}()
getErr := <-errChan //只要报错 或者service关闭阻塞在这里的会进行下去
utils.UnRegService()
log.Println(getErr)
}
7.Go退出向Consuk反注册服务,优雅关闭服务的更多相关文章
- 优雅关闭服务下线(Jetty)
在很多时候 kill -9 pid并不是很友好的方法,那样会将我们正在执行请求给断掉,同时eureka 中服务依旧是处于在线状态,这个时候我们可以使用官方提供的actuator来做优雅的关闭处理 - ...
- 批处理启动vm虚拟机服务 vm12启动无界面启动vm虚拟机系统 windows上如何操作服务 sc net启动关闭服务
windows(win10)批处理脚本 打开vm虚拟机的服务,并且开启无界面虚拟机 @echo off net start "vds" net start "VMAuth ...
- Netty源码剖析-关闭服务
参考文献:极客时间傅健老师的<Netty源码剖析与实战>Talk is cheap.show me the code! ----主线: ----源码: 先在服务端加个断点和修改下代码:如 ...
- Oracle 服务启动关闭
有没有感觉到,自从装上Oracle之后,电脑变卡了?卡是正常的,oracle作为大型数据库软件,运行起来是非常吃内存的. 所以对于自用的电脑来说,不使用Oracle的时候,应该把Oracle的一系列服 ...
- springcloud 服务注册、反注册 AOP 拦截,实现自定义功能
@Aspect@Component@Order(1000)public class EurekaServerAspect {private Logger logger = Logger.getLogg ...
- 我是服务的执政官-服务发现和注册工具consul简介
服务发现和注册 我们有了两个服务.服务A的IP地址是192.168.0.1,端口9001,服务B的IP地址192.168.0.2,端口9002.我们的客户端需要调用服务A和服务B,我们只需要在配置文件 ...
- RHEL 7 命令行注册和激活订阅服务
导读 前一阵子,红帽推出了开发者免费使用订阅功能,只要注册成为红帽开发者就可以免费使用包括 RHEL7 在内的开发套件. 今天我们就来看一看怎么使用命令行来快速注册和激活订阅服务,以后就可以方便地 ...
- 【Java】Web 服务编程技巧与窍门: 在 UDDI 注册中心为 Web 服务注册开发 UDDI Java 应用程序
本技巧建立了一个使用统一描述.发现和集成 (Universal Description, Discovery, and Integration,UDDI) 来注册应用程序级消费的 Web 服务实例.作 ...
- 【Demo 0025】注册/反注册窗体类RegisterClassEx/UnregisterClass
所有窗体在创建前都必须注册窗体类,只有注册的窗体类才被系统认知并允许实例化,换句话说通过注册告诉进程窗体管理器此类窗体的属性如: 背景色,窗体上的鼠标样式以及窗体事件处理函数等; 有一些控件类系统自 ...
随机推荐
- python 根据文件的编码格式读取文件
因为各种文件的不同格式,导致导致文件打开失败,这时,我们可以先判断文件的编码吗格式,然后再根据文件的编码格式进行读取文件 举例:有一个data.txt文件,我们不知道它的编码格式,现在我们需要读取文件 ...
- PHP的小技巧
PHP的小技巧fdd()[0]函数后面可以直接加数组索引 这样可以省内存占用啦 代码也更简洁
- 使用thanos管理Prometheus持久化数据
关于thanos的介绍可以参考这篇官方博客的翻译文档,本文不作部署操作介绍.下图是thanos的官方架构图,主要有5个组件: Query:可以近似看作是Prometheus的实现,用于采集其他组件的数 ...
- 说一说switch关键字的奥秘
Switch语法 switch作为Java内置关键字,却在项目中真正使用的比较少.关于switch,还是有那么一些奥秘的. 要什么switch,我有if-else 确实,项目中使用switch比较少的 ...
- __attribute__((format(printf, a, b)))
最近,在看libevent源码,第一次看到__attribute__((format(printf, a, b)))这种写法.因此,在这里记录下用法. 功能:__attribute__ format属 ...
- 二、hexo+github搭建个人博客的简单使用
使用hexo+github搭建一个可以外网访问的个人博客,此文用于记录博客初级的使用方法. 新建-编写-生成-部署文章的全过程 1.使用cmd完成 打开命令提示符[win+r输入cmd] 切换到自己本 ...
- 图解微信小程序---调用API操作步骤
图解微信小程序---调用API操作步骤 什么是API API(Application Programming Interface,应用程序编程接口:是一些预先定义的函数,目的是提供应用程序与开发人员基 ...
- Linux(01):linux的起源、应用场景和学习目标
- python爬取豆瓣电影首页超链接
什么是爬虫? 我们可以把互联网比作一张大网,而爬虫(即网络爬虫)便是在网上爬行的蜘蛛.把网的节点比作一个个网页,爬虫爬到这就相当于访问了该页面,获取了其信息.可以把节点间的连线比作网页与网页之间的链 ...
- 2019-11-29-C#-通过编程的方法在桌面创建回收站快捷方式
原文:2019-11-29-C#-通过编程的方法在桌面创建回收站快捷方式 title author date CreateTime categories C# 通过编程的方法在桌面创建回收站快捷方式 ...