1.总结eureka微服务创建的流程
导入相关依赖:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
<dependency>
<groupId>com.yousian</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
设置application.yml文件
server:
port: 7002
eureka:
instance:
hostname: eureka7002.com # eureka 服务器的实例名称
client:
# false 代表不向服务注册中心注册自己,因为它本身就是服务中心
register-with-eureka: false
# false 代表自己就是服务注册中心,自己的作用就是维护服务实例,并不需要去检索服务
fetch-registry: false
service-url:
#一定要注意这里的地址,这是搭建集群的关键
defaultZone: http://eureka7001.com:7001/eureka/
最后在启动类上加上@EnableEurekaServer注解,开启eureka服务端
2.如何搭建eureka集群
先导入eureka相关依赖,创建两个eureka的application的启动类,在创建两个application.yml,
设置好之后两个application.yml的地址相互注册
3.服务提供方集群如何搭建
创建两个提供服务方,只需修改下resources下的application.yml文件。
第一个application.yml
第二个application.yml
4.RestTemplate如何使用?
@Configuration
public class MyConfig {
//注入RestTemplate
@Bean
@LoadBalanced //指定restTemplate通过负载均衡的方式进行调用
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
@RestController
@Slf4j
public class OrderController {
@Autowired
RestTemplate restTemplate;
//提供方的访问路径
private static final String URL="http://cloud-payment-service";
@GetMapping("consumer/payment/{id}")
public CommonResult<Payment> findPaymentById(@PathVariable("id") Long id){
CommonResult commonResult = restTemplate.getForObject(URL + "/payment/" + id, CommonResult.class);
return commonResult;
5.简述eureka的自我保护模式? 如何配置其自我保护模式
Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将会注销该实例(默认90秒)。但是当网络分区故障发生时,微服务与Eureka Server之间无法正常通信,因为此时微服务本身没有问题,Eureka不应注销此服务。当Eureka Server节点在短时间内丢失过多客户端时,可能发生了网络分区故障,那么这个节点就会进入自我保护模式。一旦进入该模式,Eureka Server就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。当网络故障恢复后,该Eureka Server节点会自动退出自我保护模式。自我保护模式是一种对网络异常的安全保护措施。
6.什么是CAP理论? cp ap原则的含义
什么是CAP理论:分布式系统的最大难点,就是各个节点的状态如何保持一致。CAP理论是在设计分布式系统的过程中,处理数据一致性问题时必须考虑的理论。
CAP即:
Consistency(一致性)
Availability(可用性)
Partition tolerance(分区容忍性)
7.eureka 和zookeeper consul的区别?
C:Consistency (强一致性)
A:Available (可用性)
P:Partition tolerance (分区容错性)
eureka
CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强
zookeeper
CP - 满足一致性,分区容错性的系统,通常性能不是特别高
consul
AP - 满足可用性,分区容错性的系统,通常可能对一致性要求低一些
8.使用ribbon进行负载均衡的步骤
第一、引入ribbon的依赖
第二、RestTemplate本身并没有负载均衡的功能,但是如果加上@LoadBalance注解就是可以实现负载均衡
9.ribbon负载均衡的策略有哪些?
1.随机 (Random)
2.轮询 (RoundRobin)
3.一致性哈希 (ConsistentHash)
4.哈希 (Hash)
5.加权(Weighted)
6.ILoadBalance 负载均衡器
10.如何自定义负载均衡
1.引入关键类 RibbonClientConfiguration
2.现在我们自定义一个Ribbon负载均衡的策略MyRule。在@ComponentScan所扫描的包下一级子包下。
@Configuration
public class MyRule {
@Bean
public IRule myRule() {
return new RandomRule();
}
}`