搭建eureka集群
这里会建一个project,后续的关于cloud的所有项目会在这里面写,直接新加model
我这里的springboot版本为2.2.5.RELEASE,springcloud版本为Hoxton.SR3,cloud-alibaba版本为2.2.1.RELEASE
1、新建project
搭建好父级pom,删除所有的其他文件,只留下pom
<groupId>org.example</groupId>
<artifactId>mycloud</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencyManagement>
<dependencies>
<dependency><!--springboot-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency><!--springcloud-->
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency><!--alibabacloud-->
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<configuration>
<locales>en,fr</locales>
</configuration>
</plugin>
</plugins>
</build>
2、新建model-服务提供serveice-provider001
新建一个简单的springboot项目,引入依赖
<parent>
<artifactId>mycloud</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>service-provider001</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<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-actuator</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>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
写好配置文件
server:
port: 8101
spring:
application:
name: service-provider
eureka:
client:
register-with-eureka: true
service-url:
defaultZone: http://localhost:8300/eureka/
写controller
@RestController
public class ProviderContorller {
@Value("${server.port}")
private String port;
@GetMapping("/provider")
public String provider() {
return "这里是provider,port:" + port + "," + UUID.randomUUID();
}
}
记得测试是否能调通
3、新建model-服务消费service-consumer001
步骤和2一样,端口和名称修改一下
server:
port: 8200
spring:
application:
name: service-consumer001
eureka:
client:
register-with-eureka: true
service-url:
defaultZone: http://localhost:8300/eureka/
这里们先用RestTemplate来调用service-provider001服务,所以新建
@Configuration
public class RestContextt {
@Bean
@LoadBalanced//开启负载均衡
public RestTemplate getRestTemlate(){
return new RestTemplate();
}
}
@RestController
public class ConsumerController {
@Value("${server.port}")
private String port;
private static final String URL = "http://localhost:8101";
@Resource
private RestContextt restContextt;
@GetMapping("/consumer")
public String provider() {
return restContextt.getRestTemlate().getForObject(URL + "/provider", String.class);
}
}
记得测试看能不能成功调用
4、新建model-服务注册中心service-eureka001
<parent>
<artifactId>mycloud</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>service-eureka001</artifactId>
<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.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>
</dependencies>
配置文件
server:
port: 8300
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false
fetch-registry: false
启动类加上@EnableEurekaServer
注解
到这里eureka简单的搭建就完成了
先启动service-eureka001,在启动另外两个服务,打开http://localhost:8300/就可以看到注册了两个服务
但是eureka还没有做成集群,服务提供也没有做成集群
5、新建model-服务提供做集群
新建一个与serveice-provider001做成同样的微服务,搭建成集群
记得修改端口成8102
按顺序启动就能看见service-provider服务后面有两个实例
6、新建model-服务注册中心做eureka做集群
新建一个与serveice-eureka001做成同样的微服务,搭建成eureka集群
依赖一样,主要是配置文件
serveice-eureka001
server:
port: 8300
eureka:
instance:
hostname: service-eureka001
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://service-eureka002:8302/eureka/
serveice-eureka002
server:
port: 8302
eureka:
instance:
hostname: service-eureka002
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://service-eureka001:8300/eureka/
做成集群的关键在于两个eureka地址互相注册,然后其他服务记得把两个地址都注册进去,然后启动就能看到了
记得在hosts文件里面添加配置
127.0.0.1 service-eureka001
127.0.0.1 service-eureka002