SpringCloud2.0 Eureka集群 高可用的认证服务实现与搭建

SpringCloud-2.0.2.RELEASE Eureka认证后,服务注册失败问题。

        随着近几年微服务架构和Docker容器概念的火爆,也会让Spring Cloud在未来越来越“云”化的软件开发风格中立有一席之地,尤其是在目前五花八门的分布式解决方案中提供了标准化的、全站式的技术方案,意义可能会堪比当年Servlet规范的诞生,有效推进服务端软件系统技术水平的进步。

        SpringCloud Eureka是SpringCloud Netflix服务套件中的一部分,它基于Netflix Eureka做了二次封装,主要负责完成微服务架构中的服务治理功能。今天就来讲讲Eureka的高可用实现与搭建

MAVEN相关配置

<parent>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-parent</artifactId>  
    <version>2.0.2.RELEASE</version>  
    <relativePath/> <!-- lookup parent from repository -->  
</parent>  
  
<properties>  
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>  
    <java.version>1.8</java.version>  
    <spring-cloud.version>Finchley.BUILD-SNAPSHOT</spring-cloud.version>  
</properties>  
  
<dependencies>  
    <dependency>  
        <groupId>org.springframework.cloud</groupId>  
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>  
    </dependency>  
    <!-- 用于服务注入验证 -->  
    <dependency>  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-starter-security</artifactId>  
    </dependency>  
</dependencies>  

application.yml 相关配置

spring:  
  application:  
    name: EUREKA  
--- #注意这里是三个"减号"  
spring:  
  profiles: eureka1  
  security:  
    user:  
      name: admin  
      password: 123123  
server:  
  port: 8001  
eureka:  
  instance:  
    hostname: eureka1  
  client:  
    serviceUrl:  
      defaultZone: http://admin:123123@eureka2:8002/eureka/,http://admin:123123@eureka3:8003/eureka/  
    fetch-registry: true  
    register-with-eureka: true  
---  
spring:  
  profiles: eureka2  
  security:  
    user:  
      name: admin  
      password: 123123  
server:  
  port: 8002  
eureka:  
  instance:  
    hostname: eureka2  
  client:  
    serviceUrl:  
      defaultZone: http://admin:123123@eureka1:8001/eureka/,http://admin:123123@eureka3:8003/eureka/  
    fetch-registry: true  
    register-with-eureka: true  
---  
spring:  
  profiles: eureka3  
  security:  
    user:  
      name: admin  
      password: 123123  
server:  
  port: 8003  
eureka:  
  instance:  
    hostname: eureka3  
  client:  
    serviceUrl:  
      defaultZone: http://admin:123123@eureka1:8001/eureka/,http://admin:123123@eureka2:8002/eureka/  
    fetch-registry: true  
    register-with-eureka: true  

从上面的配置可以看出我们配置了3个Euerka服务,端口号分别是8001和8002与8003。 验证的用户名和密码是:admin:123123

启动类代码

import org.springframework.boot.SpringApplication;  
import org.springframework.boot.autoconfigure.SpringBootApplication;  
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;  
  
@SpringBootApplication  
@EnableEurekaServer  
public class EurekaApplication {  
  
    public static void main(String[] args) {  
        SpringApplication.run(EurekaApplication.class, args);  
    }  
}  

到这代码就基本完了,本地已经可以运行了。

启动前先在hosts文件添加内容如下:

127.0.0.1 eureka1

127.0.0.1 eureka2

127.0.0.1 eureka3

先本地运行一下:run configurations

分别启动3个配置eureka1,eureka2,eureka3,启动后到浏览器输入:http://eureka1:8001/ 输入你的用户名和密码。 敲黑板: 页面中Instances currently registered with Eureka下面并没得注入的别的服务,各种搜索引擎各种收,没得个所以然,去掉Spring Security后问题解决,可以知道问题是Spring Security引起的,查看源码发现CSRF保护默认是开启的,可以禁用掉即可。

老版本代码

security:     
  basic:  
    enabled: true  
  user:  
    name: admin  
    password: 123123  

新版本解决方案

添加一个配置类禁用csrf如下:

import org.springframework.security.config.annotation.web.builders.HttpSecurity;  
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;  
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;  
  
@EnableWebSecurity  
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {  
    @Override  
    protected void configure(HttpSecurity http) throws Exception {  
        http.csrf().disable();  
    }  
}  

完美的结果

再次启动三个eureka服务,如果一切都正确的话,结果入图下:

在Centos上运行的脚本

启动脚本:

#!/bin/sh  
#启动服务  
APP_NAME=eureka-0.0.1-SNAPSHOT  
rm -f tpid  
nohup java -jar /data/apps/eureka/$APP_NAME --spring.profiles.active=eureka1> /data/apps/eureka/eureka1.log  
nohup java -jar /data/apps/eureka/$APP_NAME --spring.profiles.active=eureka2> /data/apps/eureka/eureka2.log  
nohup java -jar /data/apps/eureka/$APP_NAME --spring.profiles.active=eureka3> /data/apps/eureka/eureka3.log  
echo $! > tpid  
echo Start Success!  

停止脚本:

#!/bin/sh  
#停止服务  
APP_NAME=eureka-0.0.1-SNAPSHOT  
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`  
if [ ${tpid} ]; then  
    echo 'Stop Process...'  
    kill -15 $tpid  
fi  
sleep 5  
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`  
if [ ${tpid} ]; then  
    echo 'Kill Process!'  
    kill -9 $tpid  
else  
    echo 'Stop Success!'  
fi  

后面的脚本我自己没验证,我也不怎么会写脚本,如果那个大神提供更好的脚本,小编感激不尽

源码地址:https://gitee.com/bianxin.com/earn_knife/tree/master/eureka

相关内容推荐:https://www.roncoo.com/course/list.html?courseName=spring+

原文链接:https://blog.csdn.net/longguo321/article/details/80493618

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序猿DD

使用Spring Boot Actuator、Jolokia和Grafana实现准实时监控

由于最近在做监控方面的工作,因此也读了不少相关的经验分享。其中有这样一篇文章总结了一些基于Spring Boot的监控方案,因此翻译了一下,希望可以对大家有所帮...

463100
来自专栏全华班

Activiti与JBPM概念和差异(整理和汇总)

导读 | Activiti VS JBPM Activiti概念 一、Activiti特点 1、数据持久化 activiti 设计思想:简洁、快速。使用my...

1.2K100
来自专栏Java后端技术栈

Spring Cloud微服务全家桶主要组件及简要介绍

微服务是最近的一两年的时间里是很火的一个概念。感觉不学习一下都快跟不上时代的步伐了,下边做一下简单的总结和介绍。

36530
来自专栏闻道于事

Spring技术内幕:设计理念和整体架构概述

30430
来自专栏java思维导图

微服务架构的服务与发现-Spring Cloud

简单来说,服务化的核心就是将传统的一站式应用根据业务拆分成一个一个的服务,而微服务在这个基础上要更彻底地去耦合(不再共享DB、KV,去掉重量级ESB),并且强调...

12050
来自专栏IT进修之路

原 荐 SpringCloud2.0 Eur

36830
来自专栏Java Web

IDEA 整合 SSM 框架学习

认识 Spring 框架 更多详情请点击这里:这里 Spring 框架是 Java 应用最广的框架,它的成功来源于理念,而不是技术本身,它的理念包括 IoC ...

1.2K80
来自专栏SpringBoot 核心技术

第三十四章:SpringBoot配置类WebMvcConfigurerAdapter

29560
来自专栏区块链

最好用的开源Web漏洞扫描工具梳理

来自FreeBuf.COM *参考来源:geekflare,FB小编柚子编译 链接:www.freebuf.com/articles/web/155209.ht...

5.7K90
来自专栏Albert陈凯

2018-06-21Spring 技术栈

原文地址:https://juejin.im/post/5b2b020351882574b4094da0?utm_source=gold_browser_ext...

10720

扫码关注云+社区

领取腾讯云代金券