一. Eureka 架构
1) 一个简单的Eureka 集群,需要有一个Eureka 服务器、若干个服务提供者。我们可以将业务组件注册到Eureka 服务器中,其他客户端组件可以向服务器获取服务并且进行远程调用。
二. 实战——基于idea的一个简单的Eureka 集群
1)创建一个空的maven项目(无需选骨架,假设该项目名为spring-cloud)
步骤:File——New Project——Maven——Next——填写GroupId, ArtifactId——Next。
2)构建Eureka服务器 (跟创建springboot项目差不多,该module名为first-eureka-server)
1.步骤:右键spring cloud——New Module——Spring Initializr——Next——填写Group,Artifact——Next——Dependencies选择Spring Cloud Discovery (然后勾选Eureka Server)——Next——填写Module name——finish.
2.添加配置文件application.properties ( eureka服务器必须设置下图两行为false,来说明是eureka服务器而不是eureka客户端 )
3.编写启动类:(注意启动类注解是:@EnableEurekaServer)
4.成功启动后,打开浏览器,输入:http://localhost:8761 。(因为还没有erueka客户端注册,所以下图红圈处为No instances available)
5.pom.xml,像这种创建方式,idea会自动将对应版本添加进来,这就省去了去查找相应版本,如果想换其他版本请查看:https://spring.io/projects/spring-cloud
其中:spring-cloud-starter-netflix-eureka-server,会自动引入spring-boot-starter-web,因此只需要加入该依赖,我们的项目就具有Web 容器的功能 。
3)编写服务提供者 (该module名为first-eureka-service-provider)
- 步骤:右键spring cloud——New Module——Spring Initializr——Next——填写Group,Artifact——Next——Dependencies选择Spring Cloud Discovery (然后勾选Eureka Discovery Client),选择Web(勾选Spring Web)——Next——填写Module name——finish.
值得注意的是,创建该Module是要添加Spring Web依赖,如下: - 添加配置文件application.properties
将应用名称配置为“first-service-provider”,该服务将会被注册到端口为8761 的Ereka 服务器, 也就是前面所构建的服务器,使用eureka.instance.hostname 来配置该服务实例的主机名 - 启动类:
- 运行:刷新http://localhost:8761/ ,结果如下:
4)编写服务调用者 (该module名为first-eureka-service-invoker)
-
步骤:创建该module步骤和创建服务提供者一样
-
添加配置文件application.properties ,端口设置为8762
-
启动类
@EnableDiscoveryClient 注解来修改启动类,该注解使得服务调用者,有能力去Eureka 中发现服务,需要注意的是@EnableEurekaClient 注解已经包含@EnableDiscoveryClient的功能,也就是说,一个Eureka 客户端,本身就具有发现服务的能力。 -
编写一个服务:
-
运行:刷新http://localhost:8761/ ,结果如下:
访问:http://localhost:8762/hi?message=springcloud
5)以上三个项目结构图:
6) IDEA开发SpringBoot或者Spring项目如何启动多个实例
上面的服务调用者first-eureka-service-invoker项目已经启动,通过修改该项目配置文件中的端口号,就可以再启动一个实例:比如该端口为:server.port=8763
这样很方便测试Spring Cloud的负载均衡功能。
新版本idea中修改如下:勾选上 allow parallel run
旧版本是 single Instance Only 需要把这个选项取消(新的勾上,旧的取消)