服务发现组件 EUREKA

2020-01-29  本文已影响0人  隔壁小王coding

服务发现组件 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页面的时候会先输入正确的用户名密码才能进入

上一篇下一篇

猜你喜欢

热点阅读