三、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、进行试验

二、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集群

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集群

六、开启http basic和https

七、使用开源的eureka管理工具

上一篇下一篇

猜你喜欢

热点阅读