SpringCloud之Eureka使用篇

1.单例EurekaServer1.1环境准备1.首先我这里有spring-cloud-parentpom工程2.spring-cloud-eureka-serverEurekaServer子工程这里端口我们使用90开头3.spring-cloud-order-service-consumer订单调用服务(也就是咱们的服务消费者)这里端口我们使用80开头4.spring-cloud-order-service-provider订单提供服务(服务提供者)这里端口我们使

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

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这个依赖

<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的依赖坐标

    <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

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 的依赖坐标

   <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
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控制台看看:
在这里插入图片描述

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。
在这里插入图片描述

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
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 来指定 使用的配置文件
在这里插入图片描述

2.2.3 查看

我们可以在Eureka 控制台中看到两个Eureka Server注册进来了。
在这里插入图片描述

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 控制台
在这里插入图片描述
可以看到我们这边都是up状态。
同样调用接口
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号