第一代Spring Cloud核心组件(Spring Cloud Netflix)
Eureka服务注册中心(服务注册中心:Eureka,Nacos,Zookeeper,Consul)
Ribbon负载均衡
Hystrix熔断器
Feign远程调用组件(Feign = RestTemplate + Ribbon + Hystrix)
GateWay网关组件
Config分布式配置中心
服务注册中心的执行流程
1.服务提供者启动
2.服务提供者将相关服务信息主动注册到注册中心(自动)
3.服务消费者获取服务注册信息(pull 服务消费者主动拉取服务提供者清单,push 订阅服务,当服务提供者有变化时,注册中心也会主动推送更新后的服务清单给消费者)
4.服务消费者直接调用服务提供者主流服务中心对比
Nacos:是Spring Cloud Alibaba核心组件之一,解决微服务开发必会涉及到的服务注册与发现,服务配置,服务管理等问题
Eureka:由Netfix开源,并被Privatal集成到SpringCloud体系中,基于REstFul API风格开发的服务注册于发现组件
Zookeeper:统一服务的名称,同步服务的状态,集群管理,分布式应用配置的管理,通常结合Dubbo一起使用,把最新服务推送给客户端,本质就是存储+监听通知,Zookeeper要想工作,至少要有三个节点数
Consul:由HashiCorp基于Go语言开发的,采用Raft算法保证服务的一致性且支持健康检查
对比
组件名 语言 CAP 对外暴露接口Eureka Java AP(自我保护机制,保证可臫) HTTP
Consul Go CP HTTP/DNS
Zookeeper Java CP 客户端
Nacos Java 支持AP/CP切换 HTTP
CAP原则: Consistency 一致性, Availability可用性, Partition tolerance分区容错性 ,三者不可兼得,要么AP,要么CP
Eureka
Eureka Client是一个Java客户端,用于简化与Eureka Server的交互
Eureka Server提供服务发现的能力
各个微服务启动时,会通过Eureka Client向Eureka Server 进行注册自己的信息(例如网络信息),Eureka Server会存储该服务的信息
搭建单例Eureka Server服务注册中心
1.创建服务中心的项目
2.导入pom文件
1)在主类的pom文件中导入微服务所依赖的jar包,在dependencies外面
<dependencyManagement> <dependencies> <!-- Spring Cloud Neflix 公司出品的微服务组件的依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Greenwich.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
2)如果你的java版本在8以上,还需要导 入以下依赖,在dependencies内部
<!-- 引入Jaxb开始 --> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-core</artifactId> <version>2.2.11</version> </dependency> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>2.2.11</version> </dependency> <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <version>2.2.10-b140310.1920</version> </dependency> <dependency> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> <version>1.1.1</version> </dependency> <!-- 引入Jaxb结束 -->
3.在刚刚创建的eureka项目中,导入eureka的依赖
<dependencies> <!-- Eureka Server服务端依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> <version>1.3.1.RELEASE</version> </dependency> </dependencies>
4.编写核心配置文件application.properties
server.port=9200 spring.application.name= leq-cloud-eurka eureka.client.service-url.defaultZone= http://localhost:9200/eureka eureka.client.register-with-eureka= true eureka.client.fetch-register= true eureka.instance.prefer-ip-address= true eureka.instance.instance-id= ${spring.cloud.client.ipaddress}:${spring.application.name}:${server.port}:@project.version@
5.创建启动类
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @EnableEurekaServer//标记该项目是一个Eureka Server (Eureka服务注册中心) @SpringBootApplication public class EurekaApplication9200 { public static void main(String[] args) { SpringApplication.run(EurekaApplication9200.class,args); } }
6.打开浏览器,访问http://localhost:9200/,看到下面的页面就表示搭建成功
注意:在控制台报错不代表我们写的有问题,这是idea的机制,我们不需要管,只要上面的页面出来就表示成功了