SpringCloud之Eureka使用篇

时间:2020-6-27 作者:admin


1.单例Eureka Server

1.1 环境准备

业务场景:
比如说某个app搞活动,然后用户每日完成多少单奖励啥东西,用户中心页面能够看到自己今日完成多少单。
环境:
1.首先我这里有spring-cloud-parent pom工程
2.spring-cloud-eureka-server Eureka Server 子工程 这里端口我们使用90开头
3.spring-cloud-user-service-consumer 用户服务 (也就是咱们的服务消费者)这里端口我们使用80 开头
4.spring-cloud-order-service-provider 订单服务 (服务提供者) 这里端口我们使用70开头
SpringCloud之Eureka使用篇
SpringCloud之Eureka使用篇

1.2 spring-cloud-parent 父工程

父工程pom.xml文件需要添加springcloud依赖,主要是为了固定springcloud组件的版本。还有就是spring-boot-starter-web这个依赖

 <dependencyManagement>
        <!--引入springcloud依赖的-->
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <!--web依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
         <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-commons</artifactId>
        </dependency>
    </dependencies>

1.3 Eureka Server 子工程

也就是我们的spring-cloud-eureka-server 工程。

1.3.1 pom.xml

在pom.xml中添加Eureka Server的依赖坐标

    <dependencies>
    	<!--eureka server 依赖坐标-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>
1.3.2 启动类

然后就是我们需要在主启动类上面添加我们@EnableEurekaServer 注解
SpringCloud之Eureka使用篇

1.3.3 application.yml

我这里使用的application.yml

server:  # 服务端口
  port: 9090  
spring:
  application:  # 应用名字,eureka 会根据它作为服务id
    name: spring-cloud-eureka-server    
eureka:
  instance:
    hostname: localhost
  client:
    service-url:   #  eureka server 的地址, 咱们单实例模式就写自己好了
      defaultZone:  http://localhost:9090/eureka
    register-with-eureka: false  # 不向eureka server 注册自己
    fetch-registry: false  # 不向eureka server 获取服务列表
1.3.4 启动浏览器查看

SpringCloud之Eureka使用篇

1.4 spring-cloud-order-service-provider 服务提供者

1.4.1 pom.xml

因为不管咱们是服务提供者还是服务调用者,对于Eureka Server来说我们客户端,所以我们这边引入Eureka Client 的依赖坐标

   <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>
1.4.2 启动类

我们需要在项目启动类上面加@EnableDiscoveryClient 注解或者@EnableEurekaClient。
SpringCloud之Eureka使用篇

1.4.3 application.yml
server:
  port: 7070
spring:
  application:
    name: spring-cloud-order-service-provider
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:9090/eureka
    fetch-registry: true
    register-with-eureka: true
1.4.4 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;
    }
}
1.4.5 启动

启动项目,去eureka控制台看看:
SpringCloud之Eureka使用篇

1.5 spring-cloud-user-service-consumer 服务调用者

本项目中的 pom.xml , 启动类 修改参考1.4节下面的

1.5.1 application.yml
server:
  port: 8080
spring:
  application:
    name: spring-cloud-user-service-consumer
eureka:
  client:
    service-url: 
      defaultZone: http://localhost:9090/eureka
    register-with-eureka: true
    fetch-registry: true
1.5.2 RestTemplateConfiguration

这里我们要用到RestTemplate 来进行远程调用,需要new RestTemplate对象交给spring

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

注意:DiscoveryClient 包是org.springframework.cloud.client.discovery.DiscoveryClient 。

@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);
    }
}
1.5.4 启动类

我们需要在项目启动类上面加@EnableDiscoveryClient 注解或者@EnableEurekaClient。
SpringCloud之Eureka使用篇

1.5.5 启动

SpringCloud之Eureka使用篇

1.5.6 测试

浏览器中访问:
SpringCloud之Eureka使用篇

2.集群Eureka Server

2.1 环境准备

spring-cloud-parent 父工程没有改动
SpringCloud之Eureka使用篇
我们是在单例Eureka Server 项目基础上改动,然后这里的Eureka Server 使用集群模式,分别是9090 跟9091端口

2.2 Eureka Server 子工程

2.2.1 修改host
127.0.0.1 EurekaServerA
127.0.0.1 EurekaServerB
2.2.1 修改application.yml

spring:
  application:
    name: spring-cloud-eureka-server


---
spring:
  profiles: u1
eureka:
  instance:
    hostname: EurekaServerA
  client:
    service-url:
      defaultZone:  http://EurekaServerB:9091/eureka
    register-with-eureka: true
    fetch-registry: true
server:
  port: 9090
---
spring:
  profiles: u2
eureka:
  instance:
    hostname: EurekaServerB
  client:
    service-url:
      defaultZone:  http://EurekaServerA:9090/eureka
    register-with-eureka: true
    fetch-registry: true
server:
  port: 9091

这里是2个Eureka Server组成的集群,然后u1 的往u2 上面注册,u2往u1上面注册

2.2.2 修改启动

可以在启动配置中 修改active profiles 来指定 使用的配置文件
SpringCloud之Eureka使用篇

2.2.3 查看

我们可以在Eureka 控制台中看到两个Eureka Server注册进来了。
SpringCloud之Eureka使用篇

2.3 spring-cloud-order-service-provider 服务提供者

2.3.1 修改application.yml
server:
  port: 7070
spring:
  application:
    name: spring-cloud-order-service-provider
eureka:
  client:
    service-url:
      defaultZone: http://EurekaServerA:9090/eureka,http://EurekaServerB:9091/eureka
    fetch-registry: true
    register-with-eureka: true
  instance:
    prefer-ip-address: true   # 使用ip注册
    #自定义实例显示格式,添加版本号
    instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}:@project.version@

这里就是多加了一个Eureka Server 服务地址,然后修改了实例显示格式。

2.4 spring-cloud-order-service-consumer 服务调用者

2.4.1 修改application.yml
server:
  port: 8080
spring:
  application:
    name: spring-cloud-user-service-consumer

eureka:
  client:
    service-url:
      defaultZone: http://EurekaServerA:9090/eureka,http://EurekaServerB:9091/eureka
    register-with-eureka: true
    fetch-registry: true
  instance:
    prefer-ip-address: true
    instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}:@project.version@

这里跟provider一样,也是在application.yml中多加了一个Eureka Server 服务地址,修改了实例显示格式。

2.5 测试

查看Eureka 控制台
SpringCloud之Eureka使用篇
可以看到我们这边都是up状态。
同样调用接口
SpringCloud之Eureka使用篇

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:87074139@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。