SpringCloud之Eureka使用篇

2022-07-23 09:33:54 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

文章目录
  • 1.单例Eureka Server
    • 1.1 环境准备
    • 1.2 spring-cloud-parent 父工程
    • 1.3 Eureka Server 子工程
      • 1.3.1 pom.xml
      • 1.3.2 启动类
      • 1.3.3 application.yml
      • 1.3.4 启动浏览器查看
    • 1.4 spring-cloud-order-service-provider 服务提供者
      • 1.4.1 pom.xml
      • 1.4.2 启动类
      • 1.4.3 application.yml
      • 1.4.4 controller编写
      • 1.4.5 启动
    • 1.5 spring-cloud-user-service-consumer 服务调用者
      • 1.5.1 application.yml
      • 1.5.2 RestTemplateConfiguration
      • 1.5.3 controller
      • 1.5.4 启动类
      • 1.5.5 启动
      • 1.5.6 测试
  • 2.集群Eureka Server
    • 2.1 环境准备
    • 2.2 Eureka Server 子工程
      • 2.2.1 修改host
      • 2.2.1 修改application.yml
      • 2.2.2 修改启动
      • 2.2.3 查看
    • 2.3 spring-cloud-order-service-provider 服务提供者
      • 2.3.1 修改application.yml
    • 2.4 spring-cloud-order-service-consumer 服务调用者
      • 2.4.1 修改application.yml
    • 2.5 测试

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开头

1.2 spring-cloud-parent 父工程

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

代码语言:javascript复制
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.6.RELEASE</version>
</parent>
 <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的依赖坐标

代码语言:javascript复制
    <dependencies>
    	<!--eureka server 依赖坐标-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>
1.3.2 启动类

然后就是我们需要在主启动类上面添加我们@EnableEurekaServer 注解

1.3.3 application.yml

我这里使用的application.yml

代码语言:javascript复制
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 启动浏览器查看
1.4 spring-cloud-order-service-provider 服务提供者
1.4.1 pom.xml

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

代码语言:javascript复制
   <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>
1.4.2 启动类

我们需要在项目启动类上面加@EnableDiscoveryClient 注解或者@EnableEurekaClient。

1.4.3 application.yml
代码语言:javascript复制
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编写
代码语言:javascript复制
@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控制台看看:

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

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

1.5.1 application.yml
代码语言:javascript复制
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

代码语言:javascript复制
@Configuration
public class RestTemplateConfiguration { 
   
    @Bean
    public RestTemplate getRestTemplate(){ 
   
        return  new RestTemplate();
    }
}
1.5.3 controller

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

代码语言:javascript复制
@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。

1.5.5 启动
1.5.6 测试

浏览器中访问:

2.集群Eureka Server

2.1 环境准备

spring-cloud-parent 父工程没有改动

我们是在单例Eureka Server 项目基础上改动,然后这里的Eureka Server 使用集群模式,分别是9090 跟9091端口

2.2 Eureka Server 子工程
2.2.1 修改host
代码语言:javascript复制
127.0.0.1 EurekaServerA
127.0.0.1 EurekaServerB
2.2.1 修改application.yml
代码语言:javascript复制
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 来指定 使用的配置文件

2.2.3 查看

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

2.3 spring-cloud-order-service-provider 服务提供者
2.3.1 修改application.yml
代码语言:javascript复制
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
代码语言:javascript复制
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 控制台

可以看到我们这边都是up状态。 同样调用接口

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/126115.html原文链接:https://javaforall.cn

0 人点赞