1、通过Eureka的一次远程服务调用的过程
2、Eureka的作用
3、在Eureka架构中,微服务角色有两类:
1、搭建EurekaServer服务步骤:
org.springframework.cloud spring-cloud-starter-netflix-eureka-server
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {public static void main(String[] args) {SpringApplication.run(EurekaApplication.class, args);}
}
server:port: 10086 # 服务端口
spring:application:name: eurekaserver # eureka的服务名称
eureka:client:
# register-with-eureka: true #false表示不向注册中心注册自己。
# fetch-registry: true #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务service-url: # eureka的地址信息defaultZone: http://127.0.0.1:10086/eureka
2、模拟多实例部署
3、服务注册
org.springframework.cloud spring-cloud-starter-netflix-eureka-client
eureka:client:service-url: # eureka的地址信息defaultZone: http://127.0.0.1:10086/eureka
4、服务消费者完成服务拉取
String url = "http://userservice/user/" + order.getUserId();
@Bean
@LoadBalanced //表示被Ribbon拦截,并进行负载均衡处理
public RestTemplate restTemplate() {return new RestTemplate();
}
1、Ribbon的负载均衡规则是一个叫做IRule的接口来定义的,每一个子接口都是一种规则;默认规则是ZoneAvoidanceRule,即在一个Zone内进行轮询访问
2、通过定义IRule实现可以修改负载均衡规则
@Bean
public IRule randomRule() {return new RandomRule();
}
userservice: #这里是服务提供者的名称ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则,随机访问
ribbon:eager-load:enabled: true # 开启饥饿加载clients: # 指定饥饿加载的服务名称,如果只有一个微服务,也可以直接写在上面- userservice # 如果写在下面,则要加个-,后续如果要添加其他微服务,继续加即可
1、Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高
2、将微服务注册到Nacos
com.alibaba.cloud spring-cloud-alibaba-dependencies 2.2.5.RELEASE pom import
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery
spring:cloud:nacos:server-addr: nacos:8849 # nacos服务地址
2、设置服务集群属性:修改application.yml文件
spring:cloud:nacos:server-addr: nacos:8849 # nacos服务地址discovery:cluster-name: HZ #配置集群名称,HZ代码杭州
userservice:ribbon:NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则,在集群内部采用随机访问,如果本地没有,则会进行跨集群访问
spring:cloud:nacos:server-addr: nacos:8849 # nacos服务地址discovery:cluster-name: HZ #集群名称namespace: 014035c1-8176-4b5e-9423-0e85c6d2cd41 # dev环境,即命名空间的IDephemeral: false # 是否是临时实例
1、共同点:
2、不同点
3、修改非临时实例的方法,即修改实例的application.yml文件
spring:cloud:nacos:server-addr: nacos:8849 # nacos服务地址discovery:ephemeral: false # 是否是临时实例,默认是true