etcd注册服务
etcd作为最简单(轻量,精简)的kv服务。etcd可以应用很多方面,但是它有一个特点,etcd只是基础,需要你自己实现功能。它不像其其它组件开箱即用,也正是如此,它足够简单精巧。
回到主题,etcd里面并没有服务注册发现的功能,所以要自己开发。
推荐一篇介绍文章 https://blog.csdn.net/bbwangj/article/details/82584988
etcd的服务注册发现,主要就是用了etcd中KV存储接TTL
基本做法:存储Key(一般是系统唯一的)V(服务配置),存储时要设置一个TTL周期。
然后定时刷新该Key(etcd中是一个指令,发送租约的ID)。
etcd没有consul里面的功能,consul会主动调用服务接口查询,检测监控状态。
因此在etcd则采用上面租约的方式,类似心跳上报,超时就在etcd中取消了。
最后我封装了一个库etcd.Provider.Service。里面采用了上面的方式
一个服务存储
Key:/系统/Services/srvname/srvid
value:ServiceEntry实体的json序列化,包含了服务的信息
注意:srvid必须在你的服务中配置唯一,同时决定了整个key的唯一
gti地址:https://github.com/jinyuttt/etcd.Provider.Service.git
nuget:etcd.Provider.Service
最后提一句:etcd中订阅发布是利用watch功能;负载均衡就是利用租约存储功能;分布式通知与协调是利用watch功能;
分布式锁是利用lock功能;队列也是存储和watch功能。
etcd注册服务的更多相关文章
- 利用etcd实现服务注册和服务发现
文章目录 服务注册 服务发现 协议编写 服务端实现 客户端实现 实验结果 参考文章 服务注册 主要逻辑在go func函数里面,先是去etcd获取一下服务,没有获取到的话就注册进去. package ...
- etcd实现服务发现
前言 etcd环境安装与使用文章中介绍了etcd的安装及v3 API使用,本篇将介绍如何使用etcd实现服务发现功能. 服务发现介绍 服务发现要解决的也是分布式系统中最常见的问题之一,即在同一个分布式 ...
- worker 启动时向 etcd 注册自己的信息,并设置一个带 TTL 的租约,每隔一段时间更新这个 TTL,如果该 worker 挂掉了,这个 TTL 就会 expire 并删除相应的 key。
1.通过etcd中的选主机制,我们实现了服务的高可用.同时利用systemd对etcd本身进行了保活,只要etcd服务所在的机器没有宕机,进程就具备了容灾性. https://mp.weixin.qq ...
- etcd学习(3)-grpc使用etcd做服务发现
grpc通过etcd实现服务发现 前言 服务注册 服务发现 负载均衡 集中式LB(Proxy Model) 进程内LB(Balancing-aware Client) 独立 LB 进程(Externa ...
- C#操作注册服务卸载服务启动服务停止服务.. .
using Microsoft.Win32; using System; using System.Collections; using System.Collections.Generic; usi ...
- 一台服务器发布多个tomcat并注册服务名办法
修改服务名称 打开Tomcat7.0.65_1/bin/service.bat 修改注册服务名称 当然这个名字自己改 比如Tomcat7_2 原始文件: set SERVICE_NAME=Tom ...
- maven小项目注册服务(一)--email和persist模块
跟着书里的讲解,跟着做了一遍该项目: 首先明白注册账户的需求: 账号的lD和Email地址都可以用来唯一地标识某个用户,而显示名称则用来显示在页面下,方便浏览.注册的时候用户还需要输入两次密码,以确保 ...
- mysql注册服务
http://www.2cto.com/database/201301/185456.html ____________________________________________________ ...
- dubbo注册服务IP解析异常及IP解析源码分析
在使用dubbo注册服务时会遇到IP解析错误导致无法正常访问. 比如: 本机设置的IP为172.16.11.111, 但实际解析出来的是180.20.174.11 这样就导致这个Service永远也无 ...
随机推荐
- maven system path,加载本地jar
当引用第三方包,且没有源代码时候,可以使用system path <dependency> <groupId>ctec</groupId> <artifact ...
- (ACM模板)队列queue
#include<iostream> #include<cstdio> #include<queue> using namespace std; struct po ...
- (ACM模板)不定长数组vector
#include<iostream> #include<cstdio> #include<vector> #include<algorithm> usi ...
- rabbitmq 从channal获得socket
std::string queue_name = "hello100"; AmqpClient::Channel::ptr_t channel = AmqpClient::Chan ...
- Hibernate性能提升
1.大数据量批量插入造成Exception in thread "main" java.lang.OutOfMemoryError 内存溢出异常 正常插入: session.sav ...
- Java数据类型转换题目
题目一 public static void main(String[] args) { byte b1 = 1, b2 = 2, b3, b6, b8; final byte b4 = 4, b5 ...
- ServletContext对象初识
什么是ServletContext? ServletContext代表一个web应用的环境(上下文)对象,ServletContext对象内部封装的是该web应用的信息.一个web应用只有一个Serv ...
- python爬虫:2.每天爬取数据量是多少?
带宽 网站阈值 单机 分布式 几百万
- tmux使用——2019年11月20日16:40:15
1.tmux 命令行的典型使用方式是,打开一个终端窗口(terminal window,以下简称"窗口"),在里面输入命令.用户与计算机的这种临时的交互,称为一次"会话& ...
- django 添加分页功能的包
Django pagination based upon the core pagination module