eureka微服务创建的流程
1、创建项目
2、引入pom依赖
3、编写application.yml配置文件
4、创建启动类
如何搭建eureka集群
1、添加域名
进入C:\Windows\System32\drivers\etc\hosts
添加172.0.0.1 eureka 7001.com , 172.0.0.1 eureka 7002.com
2、创建第二个eureka项目
3、修改 7001eureka配置文件
4、修改 7002eureka配置文件
服务提供方集群如何搭建
1、创建第二个项目提供方 (内容一致,项目名称不一致)
2、引入pom文件 (一致)
3、创建application.yml配置文件(一致)
4、创建启动类
(业务逻辑一致)
RestTemplate如何使用
1、注入RestTemplate
@Bean
public RestTemplate restTemplate(){
// return new RestTemplate();
return new RestTemplate(new OkHttp3ClientHttpRequestFactory());
}
2、测试restTemplate的api方法
@Autowired
RestTemplate restTemplate;
public static final String URL = "http://cloud-payment-service";
//调用服务提供方 查询订单信息的方法
@GetMapping("/consumer/payment/{id}")
public CommonResult<Payment> findOrderById(@PathVariable("id") Long id){
CommonResult commonResult = restTemplate.getForObject(URL + "/payment/" + id, CommonResult.class);
return commonResult;
}
简述eureka的自我保护模式 如何配置其自我保护模式
1、如果某一个为服务不再使用 不会立刻 踢出 而会等待默认时间结束(30)才会踢出
server:
#关闭自我保护机制
enable-self-preservation: false
eviction-interval-timer-in-ms: 2000
instance:
instance-id: payment8001
prefer-ip-address: true
#Eureka分客户端向服务端发送心跳的时间间隔 单位为秒30秒
lease-renewal-interval-in-seconds: 1
#Eureka服务短向服务端发送心眺最后一次等待时间上线 默认90秒
lease-expiration-duration-in-seconds: 2
什么是CAP理论
CAP即:
Consistency(一致性)
对于客户端每次操作,要么是读到是最新的数据 要么 读取失败
Availability(可用性)
任何客户端的请求都能得到响应数据 不会出现影响错我 一定会返回数据 但是不保证是最新数据
Partition tolerance(分区容忍性)
当任意数量的消息丢失或者延迟到达时 系统仍然鸡西提供服务 不会 挂掉 换句话说
就是 我会一直运行 不管我的内部出现任何数据同步问题 强调的是不会挂掉
eureka 和zookeeper consul的区别
C:Consistency (强一致性)
A:Available (可用性)
P:Partition tolerance (分区容错性)
eureka
CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强
zookeeper
CP - 满足一致性,分区容错性的系统,通常性能不是特别高
consul
AP - 满足可用性,分区容错性的系统,通常可能对一致性要求低一些
使用ribbon进行负载均衡的步骤
1、引入依赖
spring-cloud-starter-netflix-eureka-client
2、在服务消费方开启负载均衡
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
3、8001和8002服务分别添加
ribbon负载均衡的策略有哪些
Load Balance负载均衡是用于解决一台机器(一个进程)无法解决所有请求而产生的一种算法。像nginx可以使用负载均衡分配流量,ribbon为客户端提供负载均衡,dubbo服务调用里的负载均衡等等,很多地方都使用到了负载均衡
负载均衡有好几种实现策略,常见的有:
随机 (Random)
轮询 (RoundRobin)
一致性哈希 (ConsistentHash)
哈希 (Hash)
加权(Weighted)
如何自定义负载均衡
1、现在我们不使用Ribbon默认的负载均衡策略,自定义一个负载均衡策略。
修改microcloudservice-consumer-dept-80的主程序类,加入注解
@RibbonClient。
2、
现在我们自定义一个Ribbon负载均衡的策略MyRule。这个自定义的配置类不能放在@ComponentScan所扫描的包下一级子包下,否则我们自定 义 的这个配置类就会被所有的Ribbon客户端所共享,也就是说我们达不到特殊化定制的目的。
package com.gwolf.config;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyRule {
@Bean
public IRule myRule() {
return new RandomRule();
}
}
3、
在启动该微服务的时候就能去加载我们的自定义的Ribbon配置类,从而使配置生效。
在启动类上自定义Ribbon负载均衡。
@RibbonClient(name= "MICROCLOUDSERVICE-PROVIDER-DEPT", configuration = MyRule.class)
4、@RibbonClient(name = "MICROCLOUDSERVICE-PROVIDER-DEPT", configuration = MyRule.class)这个注解中的name代表的是自定义负 载均衡的是哪个提供者,configuration 代表使用的是哪个自定义的负载均衡类。
5、
现在我们程序有一个报错:Invalid bean definition with name 'myRule' defined in com.gwolf.config.MyRule: Bean name derived from @Bean method 'myRule' clashes with bean name for containing configuration class; please make those names unique!
这个是因为我们在ConfigBean中定义了一个相同的Bean名字。
6、
更改我们自定义MyRule返回的Bean的名字
7、
现在我们重新启动这个部门消费者,查看是否是随机访问的策略模式。