Eureka服务端搭建(1)

一、搭建方式

Springboot版本:2.3.1.RELEASE
SpringCloud版本:Hoxton.SR9
项目截图:在这里插入图片描述
这里采用springboot为载体进行集群模式的注册中心的搭建(双节点为例)。
注册中心作为微服务架构中的核心功能,其重要性不言而喻。所以单机版的Eureka Server在可靠性上并不符合现在的互联网开发环境。集群版的Eureka Server才是商业开发中的选择。
Eureka Server注册中心的集群和Dubbo的ZooKeeper注册中心集群在结构上有很大的不同。
ZooKeeper注册中心集群搭建后,集群中各节点呈现主从关系,集群中只有主节点对外提供服务的注册和发现功能,从节点相当于备份节点,只有主节点宕机时,从节点会选举出一个新的主节点,继续提供服务的注册和发现功能。
而Eureka Server注册中心集群中每个节点都是平等的,集群中的所有节点同时对外提供服务的发现和注册等功能。同时集群中每个Eureka Server节点又是一个微服务,也就是说,每个节点都可以在集群中的其他节点上注册当前服务。又因为每个节点都是注册中心,所以节点之间又可以相互注册当前节点中已注册的服务,并发现其他节点中已注册的服务。所以Eureka Server注册中心集群版在搭建过程中有很多的方式,找到一个最合适最可靠的搭建方式才能称为一个称职的程序员。
集群版Eureka Server可以通过Spring Boot多环境配置方式快速搭建。只要创建一个合适的Eureka Server工程,通过多个全局配置即可完成快速搭建。

二、搭建过程

2.1 我们使用IDEA新建项目,为了方便操作和项目的管理,两个eureka-server采用在一个项目下建立两个Module的形式,在Dependences时选择Eureka server。
2.2 项目生成成功后,还需要两步操作,才能让项目正常运行起来,分别为:1.在两个Application启动类上加上@EnableEurekaServer服务端的注解,2.在配置文件中加上配置参数,如果是单机设置register-with-eureka:false,fetch-registry:false,如果是集群则这两个参数设置为true,如下:

# 服务名称
spring:
  application:
    name: springcloud-eureka-server

# 服务端口号
server:
  port: 10001

# eureka相关配置
eureka:
  instance:
    hostname: eureka-server1
  client:
    # 是否把自己作为服务注册到其他服务注册中心
    register-with-eureka: false
    # 是否从其他的服务中心同步服务列表
    fetch-registry: false
    # defaultZone:http://localhost:8761/eureka/
    service-url:
      # 在集群搭建过程中,全局配置文件的定义非常重要。其中euraka.client.serviceUrl.defaultZone属性是用于配置集群中其他节点的。如果有多个节点,使用逗号','分隔。
      # defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
      defaultZone: http://eureka-server2:10002/eureka/

2.3 由配置文件可知,eureka.instance.hostname为eureka-server1,这个需要在相应操作系统的hosts文件中进行IP映射,这里把两个eureka-server都映射到127.0.0.1,如图:
在这里插入图片描述
2.4 以上完事之后,如果没有问题,启动项目,可以看到控制台无任何报错,并打出相应的端口和启动完成信息,在浏览器中输入地址:http://eureka-server1:10001/,如图:
在这里插入图片描述
2.5 如果服务打包后放到Linux系统上运行的话,执行命令:

java -jar -Dspring.profiles.active=eureka-server1 springcloud-eureka-server-1.0.jar

2.6 安全认证(如果有需要就整
如果为了注册中心安全的话,可以使用spring-boot-starter-security组件来为Eureka Server增加安全认证。
2.6.1 添加依赖包:

<!-- spring boot security安全认证启动器 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

2.6.2 修改全局配置文件,在全局配置文件中,开启基于http basic的安全认证。

# 服务名称
spring:
  application:
    name: springcloud-eureka-server
  # 开启基于http basic的安全认证
  security:
    basic:
      enabled: true
    user:
      # 设置安全认证用户名
      name: admin
      # 设置安全认证密码
      password: admin

# 服务端口号
server:
  port: 10001

# eureka相关配置
eureka:
  instance:
    hostname: eureka-server1
  client:
    # 是否把自己作为服务注册到其他服务注册中心
    register-with-eureka: true
    # 是否从其他的服务中心同步服务列表
    fetch-registry: true
    # defaultZone:http://localhost:8761/eureka/
    service-url:
      # defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
      defaultZone: http://admin:admin@eureka-server2:10002/eureka/

2.6.3 添加WebSecurityConfig配置文件,新建配置文件夹添加配置文件如下(新版本的security默认开启csrf):

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable(); //关闭csrf
        super.configure(http);
    }
}

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“OneClick Attack” 或者 Session Riding。通过伪造用户请求访问受信任站点的非法请求访问。
跨域:只要网络协议,ip 地址,端口中任何一个不相同就是跨域请求。
客户端与服务进行交互时,由于 http 协议本身是无 状态协议,所以引入了cookie进行记录客户端身份。在cookie中会存放session id用来识别客户端身份的。在跨域的情况下,session id 可能被第三方恶意劫持,通过这个 session id 向服务端发起请求时,服务端会认为这个请求是合法的,可能发生很多意想不到的事情。
2.7 通过以上操作后,eureka注册中心服务端基本配置完成,为了便于查看日志,又对日志进行了配置,采用的是springboot默认继承的日志框架Logback。
2.7.1 配置日志分两步:1.在application.yml中配置指向日志文件

## log config
logging:
  config: classpath:logback-spring.xml

2.7.2 在resources目录下新增文件logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <!-- 常量定义start -->
    <contextName>${HOSTNAME}</contextName>
    <!-- %d-时间格式、%thread-线程、%-5level-从左5字符宽度、%logger{50}-日志50个字符、%msg-信息、%n-换行 -->
    <property name="PATTERN_CONSOLE" value="%d{yyyy-MM-dd HH:mm:ss.SSS}$$${HOSTNAME}$$%highlight(%-5level)$$eureka-server1$$[%thread]$$%cyan(%logger{50})$$%yellow(%file/%line)$$%msg%n" />
    <property name="PATTERN_FILE" value="%d{yyyy-MM-dd HH:mm:ss.SSS}$$${HOSTNAME}$$%level{}$$eureka-server1$$%thread{}$$%file{}/%line{}$$%msg%n"/>
    <property name="MAX_HISTORY" value="5" />
    <property name="CHART_SET" value="UTF-8" />
    <property name="LOG_PATH" value="/Users/zhongguoqing/logs/springcloud-eureka-server1/" />

    <!-- 控制台 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>${PATTERN_CONSOLE}</pattern>
            </layout>
            <charset>${CHART_SET}</charset>
        </encoder>
    </appender>

    <!-- 正常日志-DEVELOPER,按天切分 -->
    <appender name="ROLLING_INFO_PROD" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}info_${HOSTNAME}_%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>${MAX_HISTORY}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${PATTERN_FILE}</pattern>
            <charset>${CHART_SET}</charset>
        </encoder>
    </appender>

    <!-- 错误日志-DEVELOPER,按天切分 -->
    <appender name="ROLLING_ERROR_PROD" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}error_${HOSTNAME}_%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>${MAX_HISTORY}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${PATTERN_FILE}</pattern>
            <charset>${CHART_SET}</charset>
        </encoder>
    </appender>

    <!--日志级别-->
    <root level="info">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="ROLLING_INFO_PROD" />
        <appender-ref ref="ROLLING_ERROR_PROD" />
    </root>
</configuration>

三、上述总结

通过以上操作,eureka搭建完成,我们可以根据自己的需要接入相应的功能。

下一篇: provider生产者搭建(2).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值