1.总结eureka微服务创建的流程
1.构建eureka模块
2.导入依赖
<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.krisswen.cloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
3.编写application.yml配置文件
server:
port: 7001
eureka:
instance:
hostname: localhost # eureka 服务器的实例名称 127.0.0.1
client:
# false 代表不向服务注册中心注册自己,因为它本身就是服务中心
register-with-eureka: false
# false 代表自己就是服务注册中心,自己的作用就是维护服务实例,并不需要去检索服务
fetch-registry: false
service-url:
# 设置与 Eureka Server 交互的地址,查询服务 和 注册服务都依赖这个地址
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
4.编写启动类
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)// exclude :启动时不启用 DataSource的自动配置检查
@EnableEurekaServer //开启Eureka服务
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
}
}
5.启动测试,访问 7001 端口
http://localhost:7001
2.如何搭建eureka集群
1.进入C:\Windows\System32\drivers\etc\hosts 添加如下:
**2.**创建一个与上个标题一样的eureka(步骤一样)
3.这个时候 两个项目要相互利用 修改7001配置文件yml文件如下
4.分别启动两台eureka,开始看启动效果
3.服务提供方集群如何搭建
1.先建服务方项目
2.结构如下
3.pom文件
<dependencies>
<!--eureka-client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</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>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!--mysql-connector-java-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--jdbc-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.jiahui</groupId>
<artifactId>jiahui-api-commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
4.修改appplication.yml配置文件 端口为81
5.实现服务交互还有最重要的一步
4.RestTemplate如何使用?
指定restTemplate通过负载均衡调用
5.简述eureka的自我保护模式? 如何配置其自我保护模式
自我保护就是说 eurekaserver在一定时间内没有接收到某个微服务的跳
然后他就会消失 默认是90秒 当网络延时 或不好用的时候 他不会立即消失
会开启保护机制 给你保留 不会注销其微服务
6.什么是CAP理论? cp ap原则的含义
cpa分为三个东西
一致性、可用性 、分区容忍性
- 一致性就是 对客户端 每次读到的 就是最新的,要么就读取失败,要么返回给咱们一个绝对一致的数据,要么索性就不返回
- 一致性 强调的就是数据正确一致
- 可用性 就是比较中和的 任何请求都会得到数据,不会出现响应错误,可用性说到底就是可用 一定会返回数据,但不保证数据最新,强调的是数据最新不出错
- 容忍性:通过网络来实现,就是我可以容忍你哪怕你信息丢失和延迟了我都可以原谅,并返回数据,我会一直运行 不会挂掉无论发生任何数据的同步,反正我不会挂
cp 和ap
只有当网络发生分区或失败时,才会在C和A之间做出选择。
- ap:
这种方式其实是放弃了数据一致性。因为如果出现网络延迟,数据没有及时同步到从Mysql,那就导致了主Mysql值为李四,而从Mysql值为张三,导致数据不一致。但主从mysql照样可以提供服务,也就是保证了可用性A。 - cp:
这种方式保证了数据一致性,因为主从mysql更新数据都成功才算成功,但网络出现问题时,主mysql无法访问从节点,导致写操作一直不成功。其实就是放弃了可用性,只满足CP原则,系统只能提供读服务。
7.eureka 和zookeeper consul的区别?
- Eureka:
- AP原则,无主从节点,一个节点挂了,自动切换其他节点可以使用,去中心化
- Zookeeper和Consul:
- CP设计,保证了一致性,集群搭建的时候,某个节点失效,则会进行选举行的leader,或者半数以上节点不可用,则无法提供服务,因此可用性没法满足
- 如果要求一致性,则选择zookeeper、Consul,如金融行业
- 如果要去可用性,则Eureka,如电商系统
8.使用ribbon进行负载均衡的步骤
x通过@LoadBalanced 注解实现随机访问
9.ribbon负载均衡的策略有哪些?
1.引入依赖
2.在服务消费方开启负载均衡
3.测试负债均衡
每次请求不一样 负债均衡就实现了
10.如何自定义负载均衡
大概就这几种
重新启动这个消费者,查看是否是随机访问的策略模式。