美文网首页
SpringCloud系列之Eureka

SpringCloud系列之Eureka

作者: ljchengx | 来源:发表于2021-02-23 17:54 被阅读0次

    一、注册中心

    1.简单调用

    1.Parent项目

    主要父级依赖文件详细pom文件为:

     <properties>
            <spring.cloud-version>Hoxton.SR8</spring.cloud-version>
        </properties>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.3.8.RELEASE</version>
        </parent>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring.cloud-version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    

    2.Eureka Server工程

    注册中心提供者

    1.创建一个子module在父级项目下 pom文件需要添加netflix-eureka-server

        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>
        </dependencies>
    

    2.配置文件yml如下:

    #eureka server服务端口
    server:
      port: 9991
    spring:
      application:
        name: spring-cloud-eureka-server # 应用名称,应用名称会在Eureka中作为服务名称
    
        # eureka 客户端配置(和Server交互),Eureka Server 其实也是一个Client
    eureka:
      instance:
        hostname: localhost  # 当前eureka实例的主机名
      client:
        service-url:
          # 配置客户端所交互的Eureka Server的地址(Eureka Server集群中每一个Server其实相对于其它Server来说都是Client)
          # 集群模式下,defaultZone应该指向其它Eureka Server,如果有更多其它Server实例,逗号拼接即可
          defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
        register-with-eureka: false  # ⾃⼰就是服务不需要注册⾃⼰ 集群模式下可以改成true
        fetch-registry: false # ⾃⼰就是服务不需要从Eureka Server获取服务信息,默认为true,集群模式下可以改成true
    

    3.启动项需要添加注解@EnableEurekaServer:

    @EnableEurekaServer
    @SpringBootApplication
    public class EurekaServerApplication {
        public static void main(String[] args) {
            SpringApplication.run(EurekaServerApplication.class,args);
        }
    }
    

    4.启动效果如下:

    yL9KXR.png

    这里注册服务完成,下面开始处理服务提供者。

    3.服务提供者

    服务提供者

    1.和server工程一样创建一个子module,不过需要添加的依赖不一样

    pom.xml文件如下:

        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
        </dependencies>
    

    2.yml文件需要修改配置

    server:
      port: 9992
    spring:
      application:
        name: spring-cloud-order-service-provider
    eureka:
      client:
        service-url:
          defaultZone: http://127.0.0.1:9991/eureka //这里是server工程地址
        register-with-eureka: true  # ⾃⼰就是服务不需要注册⾃⼰ 集群模式下可以改成true
        fetch-registry: true # ⾃⼰就是服务不需要从Eureka Server获取服务信息,默认为true,集群模式下可以改成true
    

    3.启动项需要添加的注解和server不一样,使用@EnableDiscoveryClient

    @SpringBootApplication
    @EnableDiscoveryClient
    public class EurekaClientApplication {
        public static void main(String[] args) {
            SpringApplication.run(EurekaClientApplication.class, args);
        }
    }
    

    4.我们这边写一个方法,等下使用,新建一个controller文件夹,创建一个controller.

    @RestController
    @RequestMapping("/order/data")
    public class OrderStatisticServiceController {
        @Value("${server.port}")
        private Integer port;
        /**
         * 根据用户id获取今日完单数
         * @param id 用户ID
         * @return  完单数
         */
        @GetMapping("/getTodayFinishOrderNum/{id}")
        public Integer getTodayFinishOrderNum(@PathVariable("id") Integer id){
            return port;
        }
    }
    

    5.启动当前服务提供者

    这里在server页面就可以看到已经注册成功。

    yL9176.png

    4.服务调用者

    调用者整体配置内容和提供者相同,我们按照第三步来修改一下

    1.先创建一个子mudole pom.xml一样

        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
        </dependencies>
    

    2.yml修改下名称和端口号

    server:
      port: 9993
    spring:
      application:
        name: spring-cloud-user-service-consumer # 应用名称,应用名称会在Eureka中作为服务名称
    eureka:
      client:
        service-url:
          defaultZone: http://127.0.0.1:9991/eureka
        register-with-eureka: true  # ⾃⼰就是服务不需要注册⾃⼰ 集群模式下可以改成true
        fetch-registry: true # ⾃⼰就是服务不需要从Eureka Server获取服务信息,默认为true,集群模式下可以改成true
    

    3.启动项也是新增@EnableDiscoveryClient 注解

    @SpringBootApplication
    @EnableDiscoveryClient
    public class ConsumerApplication {
        public static void main(String[] args) {
            SpringApplication.run(ConsumerApplication.class, args);
        }
    }
    

    4.这里我们也写一个controller ,在写controller之前写一个RestTemplate

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

    5.然后我们写一个controller 这里通过服务提供者的名称 来调用第三步的方法

    @RestController
    @RequestMapping("/user/data")
    public class UserCenterController {
        @Autowired
        private RestTemplate restTemplate;
    
        @Autowired
        private DiscoveryClient discoveryClient;
    
        @GetMapping("/getTodayStatistic/{id}")
        public Integer getTodayStatistic(@PathVariable("id") Integer id){
    
            // 使用discoveryClient 类能够与eureka server 交互, getInstances 获取注册到eureka server
            // 的"spring-cloud-order-service-provider" 实例列表
    
            List<ServiceInstance> instances = discoveryClient.getInstances("spring-cloud-order-service-provider");
    
            // 获取第一个服务信息
            ServiceInstance instanceInfo = instances.get(0);
            //获取ip
            String ip = instanceInfo.getHost();
            //获取port
            int port = instanceInfo.getPort();
            String url  ="http://"+ip+":"+port+"/order/data/getTodayFinishOrderNum/"+id;
            return restTemplate.getForObject(url, Integer.class);
        }
    }
    

    6.启动看看

    yL9JhD.png

    这里就出现了两个 我们来试试服务调用者

    我们在浏览器页面输入服务调用者的方法http://localhost:9993/user/data/getTodayStatistic/1001

    yL9N1H.png

    这里时候返回的是服务提供者的端口,验证通过,实际上最终方法调用的是9992端口的服务提供者的方法。

    以上一个Eureka简单调用方式流程完成。

    代码已上传至Github

    相关文章

      网友评论

          本文标题:SpringCloud系列之Eureka

          本文链接:https://www.haomeiwen.com/subject/rgcdfltx.html