我们已经搭建好了 服务提供方 yuanxion-service-provider 和 服务调用方 yuanxion-service-consumer .
其中,
1.服务提供方 yuanxion-service-provider 是一个提供了 根据id查询用户信息 功能的 微服务。
2.服务调用方 yuanxion-service-consumer 是一个通过通过RestTemplate远程调用yuanxion-service-provider 的调用者。
这里面有没有存在扫描问题?
1.在consumer中,我们把url地址硬编码到了代码中,不方便后期维护
如下图:
2.consumer需要记忆provider的地址,如果出现变更,可能得不到通知,地址将失效
3.provider只有1台服务,不具备高可用性 (即便provider形成集群,consumer还需自己实现负载均衡 )
4.consumer不清楚provider的状态,服务宕机也不知道
上面这些,其实就是分布式服务必须要面临的问题:
- 服务管理
如何自动注册和发现
如何实现状态监管
如何实现动态路由 - 服务如何实现负载均衡
- 服务如何实现容灾问题
- 服务如何实现统一配置 (多台服务器改配置)
这些问题,SpringCloud都将解决!
下面来试一下SpringCloud的组件:Eureka
首先,什么是Eureka呢?它是一个服务注册中心。
打个比方,Eureka服务注册中心,就好像一个中介(也可以是一个中介平台)
服务提供方,向Eureka注册自己的信息(地址,提供的服务)
消费者(服务调用者),向Eureka请求服务,Eureka会 将对应服务的 服务提供方的 地址列表 发给消费者,并且定期更新
心跳(续约),服务提供者,定期通过http方式向Eureka刷新自己的状态。
大概了解了Eureka是什么之后,我们来个Eureka的入门案例!
搭建一个项目,启动一个EurekaServer;
项目依然可以用Spring提供的脚手架快速搭建,也可以自己搭建。
快速搭建:
快速搭建时,要选则下面这个:
SpringBoot版本记得选择2.0.6
后面Finish就可以了。
注意pom文件里的,下面一个的作用是 统一管理依赖版本号 :
(截图的properties里少了两个字符集的,大家可参照下面的pom.xml的代码加入)
自己搭建的话,这里给出pom.xml文件
(快速搭建的,搭建完也可以对照一下这个pom.xml文件,避免有什么错误)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cn.yuanxion.eureka</groupId>
<artifactId>yuanxion-eureka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>yuanxion-eureka</name>
<description>Demo project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.SR2</spring-cloud.version>
</properties>
<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-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!--统一管理依赖的版本号-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
依旧先将配置文件名 application.properties 改成application.yml
再添加配置:
server:
port: 10086 # 端口
spring:
application:
name: yuanxion-Eureka # 相当于给你的微服务应用取个名字,会在Eureka中显示
eureka:
client:
service-url: # EurekaServer的地址,现在是自己的地址,如果是集群,需要加上其它Server的地址。
defaultZone: http://localhost:${server.port}/eureka
然后去引导类中 加个@EnableEurekaServer注解,启用eureka服务端
然后启动运行。
然后访问访问 http://localhost:10086/
我们会看到下面这些:
我们的Eureka注册中心就搭建好了!