类似于Dubbo中的Nacos、Zookeeper
单体应用的例子:所有的业务都集中在一个项目中,当用户从浏览器发起请求时,直接由前端发起请求给后端,后端调用业务逻辑,给前端请求做出响应,完成一次调用,整个调用过程是一条直线,不需要服务间的中转,没有必要引入注册中心。
图片原作者:江南一点雨 http://www.javaboy.org/
随系统量增大,可以将项目中拆分为不同的模块,当用户发起请求时,需要各个模块间进行调用。
图片原作者:江南一点雨 http://www.javaboy.org/
如此发现服务间的调用异常复杂,且具有强耦合性,为保证调用正常,服务间的IP必须写死,同时需要集群化部署。
Eureka基于REST来实现服务的注册与发现,SpringCloud中封装了Eureka。
Eureka有两部分:
Eureka中三个角色:
修改windows电脑hosts文件
新增一行:
127.0.0.1 eurekaA eurekaB
//目的是解析url
集群搭建,只需要修改配置文件即可
a.properties
#当前服务名字和端口
spring.application.name=eureka
server.port=1111
#给服务取别名注册到注册中心
eureka.instance.hostname=eurekaA
eureka.client.fetch-registry=true
eureka.client.register-with-eureka=true
#A服务要注册到B服务上(注册地址)
eureka.client.service-url.defaultZone=http://eurekaB:1112/eureka
b.properties
#当前服务名字和端口
spring.application.name=eureka
server.port=1112
#给服务取别名注册到注册中心
eureka.instance.hostname=eurekaB
eureka.client.fetch-registry=true
eureka.client.register-with-eureka=true
#B服务要注册到A服务上
eureka.client.service-url.defaultZone=http://eurekaA:1111/eureka
#指定配置文件启动,将不同的A,B服务相互注册
java -jar xxx.jar --spring.profiles.active=a
java -jar xxx.jar --spring.profiles.active=b
微服务间的调用使用注解@FeignClient来配置,使用在对外暴露的接口上。fallback是容错的处理类,当远程调用接口失败/超时时,走对应接口的容错逻辑,fallback指定的类必须实现@FeignClient标记的接口。
服务A调用服务B
A是一个接口,在接口中使用@FeignClient定义要调用的目标服务B
@FeignClient(name = "B", fallback = A.class)
public interface A {
//do somethings
AFackBack implentments A{
//远程调用失败的调用方法,一般是抛出业务异常
}
}