前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringCloud之Eureka使用篇

SpringCloud之Eureka使用篇

作者头像
全栈程序员站长
发布2022-07-23 09:33:54
2530
发布2022-07-23 09:33:54
举报
文章被收录于专栏:全栈程序员必看

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

文章目录

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月6,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 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 测试
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档