1、Eureka注册中心
Eureka的作用:
1、消费者该如何获取服务提供者具体信息?
2、如果有多个服务提供者,消费者该如何选择?
3、消费者如何感知服务提供者健康状态?
搭建EurekaServer服务:
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
dependency>
dependencies>
@EnableEurekaServer//Eureka自动装配
@SpringBootApplication
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
}
}
server:
port: 10010 #服务端口
spring:
application:
name: eurekaServer #服务名称
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10010/eureka #Eureka地址信息
服务注册:
将服务提供者与服务消费注册到Eureka中(服务消费者也可以做提供者)
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
spring:
application:
name: userServer #user服务名称
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10010/eureka #eureka地址信息
服务发现:
使用RestTemplate发送远程调用
例:
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
private RestTemplate restTemplate;
@Override
public Order queryOrderById(Long orderId) {
Order order = orderMapper.findById(orderId);//通过订单id查询订单
String url = "http://userServer/user/"+order.getUserId();//Eureka服务发现 userServer提供者服务名称
User user = restTemplate.getForObject(url, User.class);//使用restTemplate发送HTTP请求实现远程调用返回user对象
order.setUser(user);//封装user信息
return order;
}
}
RestTemplate添加@LoadBalanced负载均衡注解:
/**
1. 创建RestTemplate注入spring容器,发送http请求
*/
@LoadBalanced//负载均衡
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
Ribbon负载均衡:
1.代码方式:在消费者的配置类或者启动类中,定义一个新的IRule:
/**
* Ribbon负载均衡 默认轮询
* 全局生效
*/
@Bean
public IRule randomRule(){
return new RandomRule();//随机
}
2.配置文件方式:
#配置Ribbon负载均衡 针对某个服务
userServer: #提供者服务名称
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则
Ribbon饥饿加载配置:
#加载策略 Ribbon默认懒加载(第一次访问的时候会去创建LoadBalanceClient,所以第一次请求时间较长,而饥饿加载则会在项目启动时创建)
ribbon:
eager-load:
enabled: true # 开启饥饿加载
clients: userServer # 指定对userServer这个服务饥饿加载
Nacos注册中心
1、服务注册到Nacos:
父工程中添加spring-cloud-alilbaba的管理依赖:
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-alibaba-dependenciesartifactId>
<version>2.2.5.RELEASEversion>
<type>pomtype>
<scope>importscope>
dependency>
子工程添加Nacos客户端依赖:
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
配置yml文件:
spring:
cloud:
nacos:
server-addr: localhost:8848 #nacos服务地址
2、Nacos服务分级存储模型:
服务–集群–实例
设置实例的集群属性:
application.yml文件添加spring.cloud.nacos.discovery.cluster-name属性
spring:
cloud:
nacos:
server-addr: localhost:8848 #nacos服务地址
discovery:
cluster-name: CS #集群名称
Nacos根据集群负载均衡:本地集群找不到提供者,才去其它集群寻找,并且会报警告
在消费者中设置负载均衡的IRule为NacosRule:
#配置Ribbon负载均衡 针对某个服务
userServer: #提供者服务名称
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则(优先选择本地集群,-随机)
# NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则
3、Nacos权重设置:根据权重负载均衡
实例的权重控制:
1.Nacos控制台可以设置实例的权重值,0~1之间
2.同集群内的多个实例,权重越高被访问的频率越高
3.权重设置为0则完全不会被访问
4、Nacos环境隔离 - namespace
application.yml添加namespace:
spring:
cloud:
nacos:
server-addr: localhost:8848 #nacos服务地址
discovery:
cluster-name: CS #集群名称
namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 #nacos环境隔离(namespaceID)