美文网首页
服务发现组件 EUREKA

服务发现组件 EUREKA

作者: 隔壁小王coding | 来源:发表于2020-01-29 14:56 被阅读0次

    服务发现组件 EUREKA

    版本 2.2.1 RELEASE

    1. 介绍

     服务发现是微服务架构中最重要的组件之一。手动配置服务(比如Nginx)是很繁琐的,可能需要随时更改配置信息,还要考虑到负载均衡和熔断。eureka作为服务发现组件,将这些复杂的功能和组件全部整合在了一起。

    2. 简单上手

     eureka分为了服务端(server)和客户端(client)。服务端一般是多节点,高可用配置。

    1. eureka server(单节点模式)

     该模块需要在pom里面引入下面的依赖

      <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            <version>2.2.1.RELEASE</version>
      </dependency>
    

     在property文件中添加以下内容

    #服务端口
    server.port=8761
    eureka.instance.hostname=localhost
    #是否向eureka注册自己,服务端不注册
    eureka.client.register-with-eureka=false
    #是否从eureka获取注册表信息
    eureka.client.fetch-registry=false
    #eureka的注册中心地址
    eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
    

     引入依赖后,在启动类上添加相关注解@EnableEurekaServer即可

    @SpringBootApplication
    @EnableEurekaServer
    public class Application {
        public static void main(String[] args) {
            new SpringApplicationBuilder(Application.class).web(true).run(args);
        }
    }
    

     启动服务后,http://localhost:8761为eureka页面地址

    2. eureka client

     该模块需要在pom里面引入下面的依赖

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        <version>2.2.1.RELEASE</version>
    </dependency>
    

     在property文件中添加以下内容

    #通过ip显示服务
    eureka.instance.prefer-ip-address=true
    #在eureka页面上展示的服务内容格式
    eureka.instance.instance-id=${spring.cloud.client.ip-address}:${server.port}
    #eureka的注册中心地址
    eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
    

    <font color=Brown>注:spring获取ip地址为${spring.cloud.client.ip-address}</font>



     引入依赖后,在启动类上添加相关注解@EnableDiscoveryClient即可

    @EnableDiscoveryClient
    @SpringBootApplication
    public class CloudEurekaClientApplication {
        public static void main(String[] args) {
            SpringApplication.run(CloudEurekaClientApplication.class, args);
        }
    }
    

    3. eureka server(多节点模式)

     多节点模式下,server要互相注册,client只需要向其中一个server注册即可,其他server会同步注册信息


     该模块需要在pom里面引入下面的依赖

      <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            <version>2.2.1.RELEASE</version>
      </dependency>
    

     在pom文件中添加两个profile属性

    <profiles>
        <profile>
            <id>peer1</id>
            <properties>
                <peer>peer1</peer>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
                </activation>
            </profile>
        <profile>
            <id>peer2</id>
            <properties>
                <peer>peer2</peer>
            </properties>
        </profile>
    </profiles>
    

     然后在resource目录下新建两个properties文件(application-peer1.properties和application-peer2.proerties),里面的内容分别为

    peer1
    server.port=10000
    #eureka的注册中心地址
    eureka.client.service-url.defaultZone=http://localhost:10001/eureka/
    
    peer2
    server.port=10001
    #eureka的注册中心地址
    eureka.client.service-url.defaultZone=http://localhost:10000/eureka/
    

    表示互相向对方注册自己
     再修改pom文件,让环境启动的时候自动加载与环境对应的properties文件

    <build>
        <!--打包出来的jar包名-->
        <finalName>
            eureka-server-${peer}
        </finalName>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <!--指定哪些文件为资源文件,并且可以过滤-->
                <includes>
                    <include>application.properties</include>
                    <include>application-${peer}.properties</include>
                </includes>
                </resource>
            </resources>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    

     最后,在application.properties文件中动态指定激活的环境(<font color=Brown>这一点很重要,否则spring虽然将对应的properties编译到target文件中,但是无法使用其中的内容</font>)

    application.properties
    spring.profiles.active=@peer@
    

    4. 身份验证

     在server的pom文件中引入security依赖

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
            <version>2.2.1.RELEASE</version>
    </dependency>
    

     在properties文件中设置用户名和密码

    spring.security.user.name=user
    spring.security.user.password=123
    

     在对应环境的properties文件中将defaultZone进行修改(client和server都要修改)

    eureka.client.service-url.defaultZone=http://${spring.security.user.name}:${spring.security.user.password}@localhost:10001/eureka/
    

     在server新建一个securityconfig类,将eureka路径从csrf认证中忽略掉

    @Component
    @EnableWebSecurity
    public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.csrf().ignoringAntMatchers("/eureka/**");
            super.configure(http);
        }
    }
    

     重新启动server,则在进入eureka页面的时候会先输入正确的用户名密码才能进入

    相关文章

      网友评论

          本文标题:服务发现组件 EUREKA

          本文链接:https://www.haomeiwen.com/subject/njgvthtx.html