赞
踩
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).
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。