SpringCloud-eureka集群demo
eureka的工作方式、原理:
•会保存各个注册进来的微服务的基本信息:微服务名、ip、端口等
•eureka还会监控各个微服务的运行情况,做一个基本的监控,每隔30秒向已经注册的微服务发送一次心跳检测,微服务收到之后会给注册中心一个响应,如果注册中心连续三次(90秒)没有收到一个微服务的响应,会自动将微服务剔除(服务剔除),就是删除注册中心对应微服务的信息(微服务名、ip、端口等)。
如果是一台注册中心,万一注册中心挂了,整个微服务都会无法正常提供服务,怎么解决这个问题?
通过集群的方式解决
eureka集群创建步骤:
①先创建三台eureka,创建方式参照之前创建方式进行创建
分别添加依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<!-- 引入eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
</dependencies>
分别添加配置文件
server:
port: 9001
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://localhost:9001/eureka/
⑤分别给三个创建启动类,要注意的是要添加eureka server开启的注解
package com.woniuxy.eureka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer //开启注册中心的功能
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
但是做完以上步骤之后,三台eureka之间没有任何关系,并不会自动成为一个集群,需要分别在9001 9002 9003的配置文件中配置其他eureka的url,修改defaultZone 形成集群
例如9001:
9002和9003照9001改
⑥分别启动9001 9002 9003,然后在分别通过浏览访问他们的管理页面,查看情况,发现并没有集群上!!!
巨坑:如果所有的eureka需要在同一台服务器上运行,那么每个eureka的hostname不能一样
解决方案:打开系统hosts文件,配置以下信息
再次启动测试:
业务微服务应该怎么注册进三个eureka?
修改业务微服务的application.yml,指定注册到三个eureka中,以product模块为例:
server:
port: 8002
spring:
application:
name: springcloud63-product
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/car
username: root
password: 123456
mybatis:
config-location: classpath:mybatis-config.xml
eureka:
client:
service-url:
defaultZone: http://eurekaserver9001.com:9001/eureka/,http://eurekaserver9002.com:9002/eureka/,http://eurekaserver9003.com:9003/eureka/
instance:
instance-id: springcloud63-product-8002
prefer-ip-address: true
info:
app.name: this is my product module
developer.name: zr
date: 2020.3.25
language: Java
ip: 192.168.154.130
port: 8002
启动product模块测试,看他是否注册到三个eureka中,出现以下情况,表示注册成功!
再将user模块的配置文件也做一样的修改
在以上的基础上(一台eureka也可以,不是非得要集群的方式)通过微服务名进行模块间的通讯步骤:
①修改userhandler的源代码,将之前ip:port方式改为微服务名
②修改restTemplate的配置文件,添加以下注解
③启动user模块,请求user的url看能否获取到商品数据
业务模块通过集群方式解决高可用问题
集群开发步骤,以product模块为例
①创建两个商品模块,端口要不一样
②将之前product的所有类、配置、pom依赖都拷贝一份到新的product模块中
③修改新product模块的application.yml文件
还没有评论,来说两句吧...