欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

微分布式开发------eureka学习(二)

程序员文章站 2022-03-15 17:07:43
...

上一节讲述了搭建使用netfilx包搭建eureka项目,这节是对于eureka使用的记录。

上节中,创建了一个server,两个client,虽然并没有完全展示,但是具体流程就是上述将的那样。

一、通过eureka来消费接口

创建controller实现mapping就不说了,只要了解过SpringMvc做过开发的都会去实现。这里主要讲通过RestTemplate实现接口的调用。RestTemplate是Spring访问Rest服务的客户端,可以直接使用他来直接调用接口,其内部实现了多种快捷的远程http访问服务。代码如下:

@Configuration
public class BeanConfigration {

    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return  new RestTemplate();
    }

}

当然这个RestTemplate 是客户端调用的时候使用的,所以是在client需要进行实例化和配置的。当配置好后,就可以在客户端中进行使用:


@RestController
@RequestMapping("/test")
public class TestController {
	@Autowired
	private RestTemplate restTemplate;

    @RequestMapping("/hcc")
    public String eurekaTest(){
        return  restTemplate.getForObject("http://client01/test/hcc", String.class);
    }

这里需要注明的是,restTemplate.getForObject()是一个多态的方法,有4个方法,其他的暂时还没研究,现在用的是(Url, 返回参数类型)的方法。 还有最重要的一点,这个方法controller是在client02中创建的,需要调用client01中的/test/hcc, 所以后边的url是client01的,不要误解,我只是懒得起名字和好记,所以访问路径订的一样了。

client01是这个项目的名称,有application.yml中进行配置

spring:
  application:
    name: client01


server:
  port: 8081

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

client01 controller

@RestController
@RequestMapping("/test")
public class TestController {

    @RequestMapping("/hcc")
    public String eurekaTest(){

        return  "HCC";
    }
}

二、开启Eureka 认证

现在有一个很重要的问题,eureka Server是我们观察eureka具体运行的关键,相当于是一个eureka的管理后台,之前的配置虽然成功了,但也存在一些安全隐患,我们进入eureka管理页面,我们会得到以下信息:

微分布式开发------eureka学习(二)

在最下面我们会看到我们本机的ip,倘若有人知道我们服务器的ip和端口号,就可以在远程随意调用,窃取信息。你可以试试,在另一台机器是否能访问到这个机器。。。。。

添加认证第一步,就是添加依赖,但是在此之前你要明确是在那个服务中添加,这是server安全,所以我们需要在server中添加依赖:

方式---> 到maven repository 中查找相应的依赖,有些东西需要知道信息的来源,不要只粘贴别人的额。。。。。

微分布式开发------eureka学习(二)

当然我们选择Springboot包下的security,具体版本可以自己选择,也可以将版本直接注释掉,使用parent引用的版本。

  <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-security -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
            <!--<version>2.0.4.RELEASE</version>-->
        </dependency>

然后去设置server的用户名和密码

spring:
  application:
    name: server
  security:
    user:
      name: user
      password: pwd

这里注意的是 security 是在Spring下, 不和旧版本一样,旧版本是所有security 信息在 根目录下,效果如图

微分布式开发------eureka学习(二)

然后去更改客户端配置:

eureka:
  client:
    service-url:
      defaultZone: http://user:aaa@qq.com:8761/eureka/

只是这样的话,启动的时候client 端回报一个错误, 就是找不到要注册的server, unknown server,最主要的原因就是新版本的cloud 最使用security时默认使用了cfrs,我们将cfrs关闭就可以了, 最让人蛋疼的是,之前版本是可以在配置文件中配置的,在最新的版本中,没找到,强行配置了一个也不起作用, 所以接下来的想到的方法就是覆盖启用这个方法的类,经过查询,得知这个类就是WebSecurityConfigurerAdapter,所以个人实现一个子类,覆盖启用的方法,别的全是使用父类的方法。。。。、

@EnableWebSecurity
public class MyWebSecurityConfigurerAdapter extends             
WebSecurityConfigurerAdapter {

    public void configure(HttpSecurity httpSecurity) throws Exception {
        //httpSecurity.csrf().disable();
        httpSecurity.csrf().ignoringAntMatchers("/eureka/**");
        super.configure(httpSecurity);
    }
}

三 实现高可用

这个高可用个人感觉和一个分布式系统的管理差不多,个人曾经学习过hadoop及其集群的搭建,当时做的时候使用的是一主二从,一个master 2个slave。为保持起正常通信,当时首先使用ssh进行3台机器的无密码链接,然后再配置各个Hadoop的配置文件,大概有这个几个文件来着(core、yarn、hdfs),其中配置的一个主要目的就是告诉各个机器的状态和所在的位置(IP),eureka的高可用也是类似,就是启用多个server,然后将各个server进行串联,窗帘的途径就是在配置文件对各个节点进行配置,然后各自想哥哥server注册。。。。

#eureka 配置
eureka:
  client:
    #是否向注册中心注册,因为其本身就是注册中心所以设为false, 默认是注册的
    register-with-eureka: false
    #是否需要检测服务, 只有客户端需要检测,提供服务,server只是维护示例
    fetch-registry: false
    #实例主机设置
    service-url:
      defaultZone: http://user:aaa@qq.com:8762/eureka/,http://user:aaa@qq.com:8763/eureka/
  instance:
    hostname: marster
#eureka 配置
eureka:
  client:
    #是否向注册中心注册,因为其本身就是注册中心所以设为false, 默认是注册的
    register-with-eureka: false
    #是否需要检测服务, 只有客户端需要检测,提供服务,server只是维护示例
    fetch-registry: false
    service-url:
      defaultZone: http://user:aaa@qq.com:8763/eureka/,http://user:aaa@qq.com:8761/eureka/
    #实例主机设置
  instance:
    hostname: slave1
eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://user:aaa@qq.com:8763/eureka/,http://user:aaa@qq.com:8761/eureka/
  instance:
    hostname: slave2

参考书籍:Spring Cloud 微服务全栈技术与案例实现