搭建Eureka Server集群
这里只简单的使用了两个节点:主节点(eurekaserver-master)和从节点(eurekaserver-slave),分别部署到两台计算机上搭建一个eureka server集群。
建立主节点
新建一个spring boot项目配置其所需依赖:
<dependencies>
<!-- spring cloud eureka server启动器 -->
<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-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</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>
在application.yml配置文件中添加以下配置:
spring:
application:
name: eureka-server-cluster
security:
user: #通过用户名和密码为注册中心加上安全认证
name: alee
password: 123456
eureka:
instance:
lease-renewal-interval-in-seconds: 5 #eureka client发送心跳给server端的频率 默认30s
lease-expiration-duration-in-seconds: 5 #eureka server端自上一次收到client端心跳之后等待下一次心跳的超时时间 若这段时间仍无心跳则移除该Instance 默认90s
client:
register-with-eureka: false #此应用本身为注册中心,所以不应再向注册中心(自己)注册自己
fetch-registry: false #取消检索服务功能
healthcheck: #开启健康检查
enabled: true
server:
enable-self-preservation: false #关闭自我保护
eviction-interval-timer-in-ms: 5000 #清理间隔 默认60000ms
server:
port: 8200
再添加一个application-master.yml文件,配置项如下:
eureka:
instance:
hostname: eureka-master
client:
service-url.defaultZone: http://alee:123456@{从节点IP}:8200/eureka
spring.security…为该注册中心服务加上了安全认证,再通过代码配置开启基于http basic的安全认证:
@Configuration
@EnableWebSecurity
public class EurekaServerSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
//关闭跨域
http.csrf().disable();
//开启basic认证
http.authorizeRequests().anyRequest().authenticated().and().httpBasic();
}
}
服务启动类需加上@EnableEurekaServer注解:
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
然后使用mvn package打包发布到服务器上通过 java -jar -Dspring.profiles.active=master 文件名.jar 启动服务。
建立从节点
可以再次在项目中添加一个application-slave.yml文件,其配置项如下:
eureka:
instance:
hostname: eureka-slave
client:
service-url.defaultZone: http://alee:123456@{主节点IP}:8200/eureka
然后继续打包、部署,通过java -jar -Dspring.profiles.active=slave 文件名.jar 命令运行在另一台服务器上。
创建服务
创建生产者服务
新建一个springboot项目配置其pom.xml文件中依赖如下:
<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.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</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>
在application.yml配置文件中添加以下配置:
spring:
application:
name: eureka-client-producer
server:
port: 8201
eureka:
client:
service-url.defaultZone: http://alee:123456@192.168.65.192:8200/eureka/,http://alee:123456@192.168.65.205:8200/eureka/ #集群的两个服务注册地址最好都配置上
instance:
prefer-ip-address: true
instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
添加控制层对外提供Web API接口:
@RestController
@RequestMapping("/")
public class AreaController {
@GetMapping("/get")
public String getArea() {
return "China";
}
}
在启动类上添加@EnableEurekaClient注解:
@EnableEurekaClient
@SpringBootApplication
public class EurekaClientProducerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaClientProducerApplication.class, args);
}
}
创建消费者服务
新建一个spring boot项目,其pom.xml配置与生产者的一样,添加application.yml中配置信息:
spring:
application:
name: eureka-client-consumer
server:
port: 8202
eureka:
client:
service-url.defaultZone: http://alee:123456@{主节点IP}:8200/eureka/,http://alee:123456@{从节点IP}:8200/eureka/ #集群的两个服务注册地址最好都配置上
instance:
prefer-ip-address: true
instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
添加一个RestTemplate类的配置类实现控制层自动注入获取实例,并为其添加@LoadBalanced注解实现负载均衡:
@Configuration
public class RestTemplateConfiguration {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
在消费者添加一个控制层对外提供一个Web API接口并通过调用生产者的方法返回数据:
@RestController
@RequestMapping("/")
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/get")
public String test() {
return restTemplate.getForObject("http://eureka-client-producer/get", String.class);
}
}
最后在消费者启动类上加上@EnableEurekaClient注解,到此eureka server集群的搭建并实现提供服务的任务到此完成。