1.总结eureka微服务创建的流程
引入pom依赖
<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.jiahui</groupId>
<artifactId>jiahui-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
(3)编写application.yml配置文件
编写启动类
exclude = DataSourceAutoConfiguration.class
这个东西的意思就是自动配置数据源 要不然你自己在application.yml中加入数据源也可
@EnableEurekaServer
这个注解的意思就是开启服务
启动测试
启动测试,访问 7001 端口
2.如何搭建eureka集群
Eureka 集群的原理,就是 相互注册.两个都能狗使用互相利用执行
(1) 进入C:\Windows\System32\drivers\etc\hosts 添加如下:
集群一个项目肯定集群不了 再创建一个7002跟上面的pom文件一样
pom文件也一样
<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.jiahui</groupId>
<artifactId>jiahui-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
这个时候 两个项目要相互利用 修改7001配置文件yml文件如下
这个时候 两个项目要相互利用 修改7002配置文件yml文件如下
分别启动两台eureka,开始看启动效果
eureka集群总结‘
对于eureka集群的总结如下
eureka集群采用的是更换ip地址来实现的 两个项目相互调用实现相互注册 他的url路径采用的是 key: value来实现的 利用server 端口指向其他server
就可以 实现eureka 之间的相互注册 从而实现eureak集群的搭建成功
3.服务提供方集群如何搭建
刚才搭建了eureka集群 其实服务方跟刚才那个集群表示一致
原理也差不多 先建服务方项目
这个项目的分层如下
业务代码直接拿以前写的8001即可
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>
还有appplication.yml配置文件 端口为81
实现服务交互还有最重要的一步
服务集群搭建成功
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.如何自定义负载均衡
x通过@LoadBalanced 注解实现随机访问
9…使用ribbon进行负载均衡的步骤
引入依赖
在服务消费方开启负载均衡
测试负债均衡
每次请求不一样 负债均衡就实现了
10.ribbon负载均衡的策略有哪些?
大概就这几种
现在我们重新启动这个消费者,查看是否是随机访问的策略模式。