注册中心

3 分钟阅读 650 字 + 229 词
注册中心示例
服务名 服务信息 服务的IP地址,服务端口,服务对外提供的URL等order-service(订单服务)那在程序中如何存储呢?
从上面的存储内容和存储方式,是不是能想到Java中常用的数据结构Map?打开Eureka的源码,印证一下,在AbstractInstanceRegistryjava 中,有一个属性。private final ConcurrentHashMap >> registrynew ConcurrentHashMap >>();它的存储结构是用的ConcurrentHashMap,它的键值是服务名,值是个Map,而值的Map中键是服务实例ID值是租约(租约里面包括服务信息)。 key:value < 服务名:< 服务实例:ip+port,服务配置等等。> >
设计一个注册中心需要写哪些接口?
  1. 大家想一下,服务启动后,是否需要向注册中心进行注册?所以注册中心需要提供一个接口,让服务调用它来进行服务的登记注册,这就是注册中心的第一个功能, 接受服务注册
  2. 服务注册完成后,注册中心得知道这个服务是否还是有效服务?所以此时需要服务定期地告诉注册中心,自己的工作状态(是否可用)。此时需要注册中心提供第二个功能, 接受服务心跳。
  3. 当服务下线时,要通知注册中心自己要下线,注册中心需要提供对应的接口,来让服务调用。此时需要注册中心的第三个功能, 接受服务下线。
  4. 如果服务挂了,没有及时通知注册中心,此时注册中心也发现服务,最近没有发送心跳。注册中心要主动剔除挂了的服务。此时需要注册中心第四个功能, 服务剔除。
  5. 注册表中存储的信息,是要供其他服务查询的,就像通讯录一样, 是要供主人查阅的 ,所以注册中心还需要第五个功能, 查询注册表中的服务信息。
  6. 一般微服务中,每个服务都要避免单点故障,注册中心也要做集群,所以还要涉及到注册中心间,注册信息的同步。这就是注册中心的第六个功能, 注册中心集群间注册表的同步
  7. 如果让你开发,是不是也能开发出一个注册中心呢?其实本质就是一个web服务,提供上面分析的5个接口,供服务调用。这就是平时所说的 注册中心服务端 。那对应的调用注册中心的服务业务服务),一般称之为 注册中心客户端