提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
现有架构存在问题:
如果被调用方的地址发生变化怎么办?
修改调用方的代码重新发布,这个是不现实的。
那么怎么让服务消费者感知服务提供者的地址变化呢?
一、服务发现是什么?
服务消费者能够感知服务提供者的地址变化。
现实生活中的例子:你手机存了一个人的两个电话,有一天你发现有一个打不通了,然后你把这个打不通的电话删了,留下了能打通的电话。
二、服务发现原理
形象举例:

假设,服务发现组件里内嵌了一个mysql,来维护一张表。
1.每个微服务启动都会去给服务发现组件发一条insert sql.
2.微服务content-center 调用user-center 时,content-center会发送给服务发现组件一条sql :select ip from table where service_name=user-center and status=UP;
3.实际每个微服务都会缓存这张表,定时与服务发现同步,实际调用不会每次都请求服务发现组件。
4.微服务会定时给服务发现组件发心跳,如果服务发现组件 发现user-center长时间没有收到一个服务的心跳,则会把这个服务的statu=DOWN
5.content-center微服务同步了服务发现的这个表后,就会发现有个服务的地址发生了变化,就不会调用statu=DOWN的这个user-center了。
服务发现机制使得服务消费者能动态感知服务提供者的地址变化,避免因地址变更导致的调用失败。通过服务发现组件,微服务在启动时注册自身信息,消费者通过查询服务发现组件获取最新服务地址,并通过心跳机制保持服务状态更新。当服务不可用时,服务发现会标记为DOWN,避免无效调用。
4785

被折叠的 条评论
为什么被折叠?



