golang consul-grpc 服务注册与发现
标签: golang grpc consul 微服务 服务注册与发现
config := api.DefaultConfig()
config.Address = r.Address
client, err := api.NewClient(config)
if err != nil {
panic(err)
}
agent := client.Agent()
IP := localIP()
reg := &api.AgentServiceRegistration{
ID: fmt.Sprintf("%v-%v-%v", r.Service, IP, r.Port), // 服务节点的名称
Name: fmt.Sprintf("grpc.health.v1.%v", r.Service), // 服务名称
Tags: r.Tag, // tag,可以为空
Port: r.Port, // 服务端口
Address: IP, // 服务 IP
Check: &api.AgentServiceCheck{ // 健康检查
Interval: r.Interval.String(), // 健康检查间隔
// grpc 支持,执行健康检查的地址,service 会传到 Health.Check 函数中
GRPC: fmt.Sprintf("%v:%v/%v", IP, r.Port, r.Service),
DeregisterCriticalServiceAfter: r.DeregisterCriticalServiceAfter.String(), // 注销时间,相当于过期时间
},
}
if err := agent.ServiceRegister(reg); err != nil {
panic(err)
}
services, metainfo, err := w.client.Health().Service(w.service, "", true, &api.QueryOptions{
WaitIndex: w.lastIndex, // 同步点,这个调用将一直阻塞,直到有新的更新
})
if err != nil {
logrus.Warn("error retrieving instances from Consul: %v", err)
}
w.lastIndex = metainfo.LastIndex
addrs := map[string]struct{}{}
for _, service := range services {
addrs[net.JoinHostPort(service.Service.Address, strconv.Itoa(service.Service.Port))] = struct{}{}
}
// HealthImpl 健康检查实现
type HealthImpl struct{}
// Check 实现健康检查接口,这里直接返回健康状态,这里也可以有更复杂的健康检查策略,比如根据服务器负载来返回
func (h *HealthImpl) Check(ctx context.Context, req *grpc_health_v1.HealthCheckRequest) (*grpc_health_v1.HealthCheckResponse, error) {
return &grpc_health_v1.HealthCheckResponse{
Status: grpc_health_v1.HealthCheckResponse_SERVING,
}, nil
}
grpc_health_v1.RegisterHealthServer(server, &HealthImpl{})
智能推荐

HashMap HashMap是线程不安全的。可以通过Collections将其包装为线程安全的Map 我们看一下Collections的synchronizedMap方法 使用了互斥对象 mutex来带到同步。对所有Publish的方法都采用 synchronized (mutex)方法进行加锁 HashTable hashtable是线程安全的。实现方法是将涉及到修改hashtable的方法,...

1、使用wait方法和notify方法实现“生产者和消费者模式” 2、什么是“生产者和消费者模式”? 生产线程负责生产,消费线程负责消费。 生产线程和消费线程要达到均衡。 这是一种特殊的业务需求,在这种特殊的情况下需要使用wait方法称notify方法。 3.、wait和notify方法不是线程对象的方法,是普通java对获都有的方法。 4、wait...

使用opencv,首先要了解Mat数据结构 1、Mat是OpenCV最基本的数据结构,Mat即矩阵(Matrix)的缩写,Mat数据结构主要包含2部分:Header和Pointer。Header中主要包含矩阵的大小,存储方式,存储地址等信息;Pointer中存储指向像素值的指针。我们在读取图片的时候就是将图片定义为Mat类型,其重载的构造函数一大堆, 2、关于Mat数据复制:前面说过Mat包括头和...
将URl映射到控制器上的操作方法. 路由只是解析输入请求、并填充存储在当前RequestContext(请求上下文)中的一个RouteData实例。 一、 统一资源定位符——URL 二、 路由概述 1 、对比路由和URL重写 路由:匹配传入URL用到的映射规则,生成URL,映射到资源. URL重写:把旧URL映射到新的URL 2 、路由方法 3 、定义特性路由 ...

文章目录 1.YARN产生背景 1.1 MapReduce1.x 存在一些问题 1.2 优化资源利用率和降低运维成本 2.YARN概述 2.1 关键词汇概念 2.2 执行流程 3.YARN的部署 4.提交Job到YARN运行 4.1 运行hadoop内置mapreduce-examples任务 4.2 运行自己编写的任务 4.2.1 **AccessYARNApp** 4.2.2 打包项目 4.2...
猜你喜欢

? Vue + GSAP 实战 在学习过基础 SVG 动画原理后,如果结合我们熟悉的技术栈使用岂不是更爽。GSAP 提供了 npm 安装包,下面我们来在 Vue 项目中集成 GSAP。 安装 GSAP 在 Vue 组件中使用 GSAP 假设我们让一个矩形旋转 240 度,无限循环。 项目演示 可以在 CodeSandBox 上进行尝试 ? https://codesandbo...

参考了许多大佬的代码+自己慢慢调,虽然还是不完全理解,但突然对python有了点兴趣,有的库可太好用了 https://blog.csdn.net/viafcccy/article/details/85217934 https://blog.csdn.net/qq_30638831/article/details/79959133 代码 运行结果: 题外话 最近超级焦虑呢,去看了一下今年的校招,感...

KNN-machine leanring notes 1.分类准确度够用吗? 2.什么是混淆矩阵? 3.究竟什么评价指标更合适? 4.ROC曲线 4.1分类阈值、TPR和FPR 4.1.1分类阈值 4.1.2 TPR 4.1.3 FPR 4.2 ROC曲线 4.2.1 分析 5 AUC 6 分类精确度总结 7 线性回归的评价指标 8 线性回归代码评价的实现 8.1 简单线性回归预测 9 R Squ...

1,题目要求 Given a binary tree, find the length of the longest path where each node in the path has the same value. This path may or may not pass through the root. Note: The length of path between two nod...

源码: github: https://github.com/liaotuo/Struts2-Demo/tree/master/struts2-demo 环境搭建 下载struts2 官网下载:http://mirror.bit.edu.cn/apache/struts/2.3.34/struts-2.3.34-all.zip 注:本教程使用2.3.34版本 目录结构 所需基本jar包 解压app...