三、spring cloud eureka(实战演练)
2019-03-24 本文已影响0人
小manong
在开始试验之前,先回顾下eureka的架构:
eureka架构图
一、eureka入门案例(hello world)
eureka入门案例架构图1、创建父工程
父工程项目结构图父工程pom文件配置:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
2、创建eureka server(注册中心)
(1)pom文件配置为
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
(2)创建注册中心启动项
@SpringBootApplication
@EnableEurekaServer
public class EurakeServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurakeServerApplication.class, args);
}
}
(3)配置注册中心
server.port=8081
#设置当前实例的主机名称
eureka.instance.hostname=localhost
#是否将应用实例注册到eureka server上,默认是true
eureka.client.register-with-eureka=false
#检索服务(默认是true)
eureka.client.fetch-registry=false
#指定服务注册中心地址,类型为 HashMap,并设置有一组默认值,默认的Key为 defaultZone;
# 默认的Value为 http://localhost:8761/eureka ,如果服务注册中心为高可用集群时,多个注册中心地址以逗号分隔。
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
#当eureka server启动的时候,不能从对等节点获取instance注册信息的情况,应等待多长时间。
eureka.server.wait-time-in-ms-when-sync-empty=0
#启动注册中心的自保护机制(默认是true)
eureka.server.enable-self-preservation=false
3、创建eureka client(服务提供者)
(1)pom文件
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
(2)创建服务提供者启动项及controller 访问url
@SpringBootApplication
@EnableEurekaClient
public class EurakeClientApplication {
public static void main(String[] args) {
SpringApplication.run(EurakeClientApplication.class, args);
}
}
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "hello world";
}
}
(3)配置
server.port=8082
spring.application.name=eurake-client-demo1
#向注册中心注册
eureka.client.service-url.defaultZone=http://localhost:8081/eureka/
4、创建eureka consumer(服务消费者)
(1)pom配置
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
(2)创建启动类及配置ribbon复杂均衡
@SpringBootApplication
@EnableDiscoveryClient
public class RibbonConsumer1Application {
public static void main(String[] args) {
SpringApplication.run(RibbonConsumer1Application.class, args);
}
}
@Configuration
public class RibbonLoadBalancedConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
(3)进行服务消费
@RestController
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping("/consumer")
public String helloConsumer() {
ResponseEntity<String> forEntity =
//EURAKE-CLIENT-DEMO1必须大写,需要和服务提供者的实例一样且大写
restTemplate.getForEntity("http://EURAKE-CLIENT-DEMO1/hello", String.class);
return forEntity.getBody();
}
}
(4)配置
server.port=8083
spring.application.name=ribbon-consumer
#向注册中心注册并获取相关的服务提供者信息
eureka.client.service-url.defaultZone=http://localhost:8081/eureka/
5、进行试验
- 先开启注册中心server,看eureka监控界面(此时没有服务)
- 然后开启client服务提供者,看eureka监控界面(此时有一个client的服务)
- 然后开启consumer服务消费者,看eureka监控界面(此时有两个服务了)
- 访问http://localhost:8083/consumer(可以看到服务消费者成功消费服务提供者的服务)
二、eureka集群案例
集群案例结构图- 集群案例只是在单个实例案例上复制一份注册中心和服务提供者,主要是对配置文件的修改,现在比如有两个注册中心和两个服务提供者,配置可以为:
针对服务注册中心端:
peer1(端口8084):
//指向注册中心2
eureka.client.service-url.defaultZone=http://localhost:8085/eureka/
peer2(端口8085):
//指向注册中心1
eureka.client.service-url.defaultZone=http://localhost:8084/eureka/
针对客户端(服务提供者)
producer1和producer2一样,都需要配置两个注册中心的地址:
eureka.client.service-url.defaultZone=http://localhost:8084/eureka/,http://localhost:8085/eureka/
三、实现服务提供者动态扩容
- 需要结合配置中心来实现,在配置中心中配置相关的项,然后重新刷新配置中心实现扩容。
四、一个region下面的多zone集群
- 例如我们只有一个region,而一个region有两个zone(zone1,zone2),每一个zone都有两个server。可以配置如(其他类似):
server.port=8761
spring.application.name=eureka-server
eureka.instance.hostname=localhost
eureka.instance.ip-address=true
eureka.instance.metadata-map.zone=zone1
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.client.region=region-east
eureka.client.service-url.zone1=http://localhost:8671/eureka/,http://localhost:8672/eureka/
eureka.client.service-url.zone2=http://localhost:8673/eureka/,http://localhost:8674/eureka/
eureka.client.availability-zones.region-east=zone1,zone2
eureka.server.wait-time-in-ms-when-sync-empty=0
eureka.server.enable-self-preservation=false
五、多region下面的多zone集群
- 可以参考书籍《从新定义springcloud》
六、开启http basic和https
- 可以参考书籍《从新定义springcloud》