zoukankan      html  css  js  c++  java
  • Eureka注册中心(一)

    注册中心在微服务架构中是必不可少的一部分,主要用来实现服务治理功能。

    注册中心带来的好处是你不需要知道有多少提供方,你只需要关注注册中心有多少服务即可。

    1.Eureka

    Spring Cloud Eureka是Spring Cloud Netflix微服务套件的一部分,主要实现服务治理功能。

    2.使用Eureka编写注册中心服务

    创建一个maven项目fangjia-eureka,需要这些依赖:spring boot,eureka,spring cloud,代码如下:

    <!-- Spring  Boot -->
    <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.4.RELEASE</version>
            <relativePath />
        </parent>
    
    <!-- eureka-->
    <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka-server</artifactId>
            </dependency>
        </dependencies>
    
    <!-- Spring Cloud-->
    <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Dalston.SR4</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    在启动类上加上@EnableEurekaServer,开启Eureka Server

    接着在application.properties属性文件增加以下配置:

    spring.application.name=fangjia-euraka
    server.port=8761
    eureka.instance.hostname=localhost
    #自己就是注册中心,所以别注册自己
    eureka.client.register-with-eureka=false
    #注册中心职责是维护服务实例,不需要检索服务
    eureka.client.fetch-registry=false

    3.编写服务提供者

    3.1 创建项目注册到Eureka

    注册中心建好并启动后,接下来将一个服务提供者fangjia-fsh-house-service注册到Eureka中,并提供一个接口给其他服务调用。

    还是创建maven项目,写上相关依赖:

    <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.4.RELEASE</version>
            <relativePath />
        </parent>
    
    
        <dependencies>
    <!--注意这里跟注册中心server是不一样的-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</artifactId>
            </dependency>
        <dependencies>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Dalston.SR4</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    在启动类上加入@EnableDiscoveryClient,表示当前服务是一个Eureka的客户端。

    接下来创建一个application.properties文件(创建springboot项目时直接包含的,接下来不在说创建,直接用),添加配置:

    spring.application.name=fsh-house
    server.port=8081
    
    #注册到注册中心去
    eureka.client.service-url.defaul-zone=http://localhost:8761/eureka
    启动服务,打开Eureka的Web控制台,就可以看到新注册的服务信息了。

    3.2 编写提供接口

    创建一个Controller,提供一个接口给其他服务查询:

    @RestController
    @RequestMapping("/house")
    public class HouseController {
    
        @GetMapping("/hello")
        public String hello() {
            return "hello";
        }
    }
    这时通过访问localhost:8081/house/hello,如果能看到返回的hello字符串,证明接口提供成功了。

    4.编写服务消费者

    4.1 直接调用接口

    创建一个maven项目fangjia-fsh-substitution-service,然后添加依赖,依赖和服务提供者的一样。启动类也一样。

    唯一不一样的是配置信息:

    spring.application.name=fsh-substitution
    server.port=8082
    RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程HTTP服务的方法,能够大大提高客户端的编写效率。我们

    通过配置RestTemplate来调用接口,代码如下:

    @Configuration
    public class BeanConfiguration {
        
        @Bean
        public RestTemplate getRestTemplate() {
            return new RestTemplate();
        }
    }

    创建接口,在接口中调用house/hello接口,代码如下:

    @RestController
    @RequestMapping("/substitution")
    public class SubstitutionController {
    
        @Autowired
        private RestTemplate restTemplate;
        
        @GetMapping("/callHello")
        public String callHello() {
            return restTemplate.getForObject("http://localhost:8081/house/hello", String.class);
        }
    }

    启动启动类启动消费者服务,访问localhost:8082/substitution/callHello看看有没有返回hello字符串,返回了就证明调用成功。

    4.2 通过Eureka来消费接口

    上面是直接通过服务接口的地址来调用的,完全没有用到Eureka带给我们的便利。既然用了注册中心,那么客户端调用的时候肯定是不需要关心有多少个服务提供接口,下面我们来改造之前的调用代码。

    首先改造RestTemplate的配置,添加一个@LoadBalanced注解,这个注解会自动构造LoadBalancerClient接口的实现类并注册到Spring容器中,代码如下:

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

    接下来就是改造调用代码,我们不再直接写固定地址,而是写成服务的名称,这个名称就是我们注册到Eureka中的明称,是属性文件中的spring.application.name,代码如下:

    @RestController
    @RequestMapping("/substitution")
    public class SubstitutionController {
    
        @Autowired
        private RestTemplate restTemplate;
        
        @GetMapping("/callHello")
        public String callHello() {
            return restTemplate.getForObject("http://fsh-house/house/hello", String.class);
        }
    }
    5.开启Eureka认证

    注册中心有公网IP的话,加上权限认证来保证安全性。

    改造我们的注册中心,通过集成Spring-Security来进行安全认证。在pom中添加Spring-Security的依赖,然后在配置文件中加上认证的配置信息:

    #是否开启基本的鉴权,默认为true,不想要密码就设置为false
    security.basic.enabled=false
    security.user.name=xuchao
    security.user.password=123abc

    注意:

    不添加security的jar包,就不需要密码;

    添加了,不设置用户名密码,用户名默认:user   密码:默认产生的随机密码   (一般默认用户名有admin,root,user,guest)

    添加后,就是自己的,注意用户名密码后面可以有空格,不小心打了空格一定要检查,确保输入正确。


    在Eureka开启认证后,客户端注册的配置也要加上认证的用户名和密码信息,如:

    eureka.client.service-url.defaul-zone=http://用户名:密码@localhost:8761/eureka
  • 相关阅读:
    darknet实时识别无法显示在窗口解决
    C# 获取当前打开的文件夹2
    C# 如何调试安装包
    C# 自定义文件格式并即时刷新注册表 非关闭explorer
    C# 获取当前打开的文件夹
    SQL Server里面导出SQL脚本(表数据的insert语句)
    windows平台安装redis服务
    C# 默认参数/可选参数需要注意
    webstrom使用
    office密匙
  • 原文地址:https://www.cnblogs.com/xc-xinxue/p/12448570.html
Copyright © 2011-2022 走看看