问题一:于微服务多为集群部署,在这种情况下,微服务之间要调用彼此的接口,如果使用url或者ip地址的形式调用会带来很多麻烦,例如:无法确定要连的主机是否可用。这种情况下如何实现统一管理?
====>这种情形下,就需要一个系统对所有的微服务进行统一的管理,实时的确定各个微服务所部署的主机的可用状态,这个系统就是注册中心。
注册中心主要的作用 : 统一管理各个微服务,微服务向注册中心注册自己的信息,然后定时的和注册中心通信,以便注册中心区分可用和不可用的主机;而要调用服务的程序则向注册中心申请相应服务,注册中心返回给程序请求服务可用的主机ip以及端口号,这样实现服务的调用,常用的注册中心有eureka,zookeeper等。
1、什么是Eureka
Eureka采用C/S结构,Server提供服务注册服务,各个节点启动后(Client),会在Server中进行注册,这样Server中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
在应用启动后,将会向Server发送心跳,默认周期为30秒,如果Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。
Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。
2、创建一个Eureka服务
1、建立Eureka服务服务端模块
2、配置Eureka客户端,即在其他项目模块中启动项添加@EnableEurekaClient
3、启动Eureka服务,访问http://localhost:(自己配的端口号)/
即可看见
详细配置可参考
:spring cloud之Eureka--服务治理
问题二:如何实现一个项目中不同模块间通信?
====>可以自己写个http服务来调令一个模块,或者采用Feign的方式将被调用(相当于server)接口暴露出来,供另一个模块(相当于client)调用。
场景:假设有 A、B服务及C模块:
A 抽象出接口形成C模块 ,提供B 使用;
B 通过 带有@FeignClient 声明的C接口模块 调用A服务;
1、生成需要暴露的接口文件C,@FeiginClient
2、A直接调用暴露接口C即可。
详细的配置信息科参考
spring cloud使用过Eureka怎么进行服务间相互访问--Feign
网友评论