Spring Cloud 服务注册与发现 Eureka

实战监听 Eureka client 的缓存更新 复制代码 复制代码 复制代码 复制代码 复制代码 复制代码 阅读详情

Spring Boot 专栏:Spring Boot 从零单排
Spring Cloud 专栏:Spring Cloud 从零单排
GitHub:SpringCloudDemo
Gitee:SpringCloudDemo

在上一篇文章 Spring Cloud整合Spring Boot(服务提供者和服务消费者) 中,我们已经创建了一个服务提供者和服务消费者,但是在消费者调用提供者接口的时候,我们把提供者的地址硬编码在了消费者代码里,这样我们的代码极其不优雅,也不利于维护。现在,我们使用Eureka来优雅地实现消费者调用提供者。


0. 开发环境

  • IDE:IntelliJ IDEA 2017.1 x64

  • jdk:1.8.0_91

  • Spring Boot:2.0.9.RELEASE

  • Spring Cloud:Finchley.RELEASE

1. 新建Eureka服务注册中心

1.1 新建Eureka服务注册中心

在这里插入图片描述

1.2 引入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <artifactId>spring-cloud-eureka</artifactId>
    <packaging>jar</packaging>

    <parent>
        <groupId>cn.wbnull</groupId>
        <artifactId>spring-cloud-demo</artifactId>
        <version>1.0.0</version>
    </parent>

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

1.3 新建application.yml

server:
  port: 8090
  servlet:
    context-path: /springcloudeureka

spring:
  application:
    name: spring-cloud-eureka

eureka:
  instance:
    hostname: localhost
  client:
    #此项目不作为客户端注册
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://localhost:${server.port}/springcloudeureka/eureka/

这里我们解释下这两个配置的含义

  • register-with-eureka:表示是否注册自身到Eureka服务器
  • fetch-registry:表示是否从Eureka服务器上获取注册信息

1.4 新建Spring Boot入口类

这里要注意,入口类增加@EnableEurekaServer注解,表示此项目是Eureka服务端

package cn.wbnull.springcloudeureka;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class SpringCloudEurekaApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringCloudEurekaApplication.class, args);
    }
}

1.5 启动服务

启动Eureka服务,浏览器访问 http://127.0.0.1:8090/springcloudeureka/ 可以打开Eureka界面,这里因为我们未注册服务,所以Application是空的。
在这里插入图片描述

2. 新建服务提供者

这里我们直接修改上篇中创建的服务提供者spring-boot-provider,使其成为Eureka客户端

2.1 引入依赖

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

2.2 修改application.yml

application.yml 增加如下配置

eureka:
  client:
    #将此项目注册到Eureka服务
    register-with-eureka: true
    fetch-registry: false
    service-url:
      defaultZone: http://localhost:8090/springcloudeureka/eureka/

2.3 修改Spring Boot入口类

SpringBootProviderApplication 增加注解@EnableEurekaClient,表示此项目是Eureka客户端

@SpringBootApplication
@EnableEurekaClient
public class SpringBootProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootProviderApplication.class, args);
    }
}

2.4 启动服务

我们先启动Eureka服务,再启动spring-boot-provider,然后再次浏览器访问 http://127.0.0.1:8090/springcloudeureka/ ,服务注册成功。
在这里插入图片描述

3. 再新建一个服务提供者

这里,我们再创建一个新的服务提供者spring-boot-provider-v2,可以直接复制spring-boot-provider。

复制创建完成后,我们修改一些配置以区别两个服务提供者

3.1 pom.xml

两个服务提供者的artifactId不能相同,这里我们修改第二个服务提供者artifactId为spring-boot-provider-v2

    <artifactId>spring-boot-provider-v2</artifactId>
    <packaging>jar</packaging>

3.2 application.yml

两个服务提供者的端口不能冲突,这里我么修改第二个服务提供者的 server.port=8083,但是spring.application.name=spring-boot-provider,两个服务提供者名字相同

server:
  port: 8083
  servlet:
    context-path: /springbootprovider

spring:
  application:
    name: spring-boot-provider

3.3 GatewayController

区别两个服务提供者的返回信息,这里我们修改第二个服务提供者GatewayController接口返回信息

@RestController
@Scope("prototype")
public class GatewayController {

    @GetMapping(value = "/gateway")
    public String gateway() throws Exception {
        return "hello world,this is spring-boot-provider-v2";
    }
}

3.4 启动服务

启动新建的服务提供者,然后再次浏览器访问 http://127.0.0.1:8090/springcloudeureka/ ,如下所示,有两个spring-boot-provider服务提供者,端口分别是8081,8083
在这里插入图片描述

4. 新建服务消费者

回到我们开篇说的,我们上篇创建的服务消费者在调用服务提供者接口时把提供者的地址硬编码在了消费者代码里,现在我们来解决这个问题。

这里我们也直接修改上篇中创建的服务消费者spring-boot-consumer,使其成为Eureka客户端

4.1 引入依赖

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

4.2 修改application.yml

eureka:
  client:
    register-with-eureka: false
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:8090/springcloudeureka/eureka/

4.3 修改Spring Boot入口类

SpringBootConsumerApplication增加两个注解,@EnableEurekaClient表示此项目是Eureka客户端,@LoadBalanced表示开启负载均衡

package cn.wbnull.springbootconsumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableEurekaClient
public class SpringBootConsumerApplication {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(SpringBootConsumerApplication.class, args);
    }
}

4.4 修改GatewayController

将原来硬编码写死的服务提供者的地址 http://localhost:8081/springbootprovider/gateway 改成 http://spring-boot-provider/springbootprovider/gateway

spring-boot-provider 就是我们刚才创建的服务提供者的 spring.application.name,也就是注册到Eureka中的服务的id。

在Eureka中,我们可以不使用 ip:port 而是直接使用 服务id 去访问服务。但是这里要注意,服务id 替换的只是 ip:port,server.servlet.context-path 还是要保留的。

@RestController
@Scope("prototype")
public class GatewayController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping(value = "/gateway")
    public String gateway() throws Exception {
        return restTemplate.getForObject("http://spring-boot-provider/springbootprovider/gateway", String.class);
    }
}

4.5 测试

我们把四个服务依次启动起来,然后浏览器访问 http://127.0.0.1:8082/springbootconsumer/gateway

不断刷新几次,可以看到,接口有时会返回hello world,this is spring-boot-provider,有时会返回hello world,this is spring-boot-provider-v2。这是因为我们使用**@LoadBalanced**注解开启了负载均衡。
在这里插入图片描述
在这里插入图片描述


微信:https://mp.weixin.qq.com/s/L4WVLGh7d6ULl9bP6IdxVg
微博:https://weibo.com/ttarticle/p/show?id=2309404366699653683350
知乎:https://zhuanlan.zhihu.com/p/64284070



Spring Cloud构建微服务架构(一):服务注册与发现(Eureka) 1. Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。 Spring Cloud 全家桶: - Spring Cloud 服务注册中心 Spring Cloud... 阅读详情

相关推荐

Spring Cloud入门实战(一) Eureka--服务注册与发现

服务的注册与发现 在微服务架构中,服务的发现和注册至关重要。服务提供者、服务消费者、服务发现组件的关系大致如下: 各个微服务在启动时,将自己的网络地址等信息注册到服务发现组件中,服务发现组件会存储这些信息。 服务消费者可从服务发现组件查询服务提供者的网络地址,并使用该地址调用服务提供者的接口。 各个微服务与服务发现组件使用一定机制通信。服务发现组件如长时间无法与某微服务实现通信,就会注销该实例。...

逆流而上的博客 7986

springboot服务注册到Eureka,端口总是默认8080,自己配置端口不生效

springboot服务注册到Eureka,端口总是默认8080,自己配置端口不生效

qq_45699784的博客 1982

SpringBoot + Spring Cloud Eureka 服务注册与发现及jdk11

SpringBoot + Spring Cloud Eureka 服务注册与发现 什么是Spring Cloud Eureka Eureka是Netflix公司开发的开源服务注册发现组件,服务发现可以说是微服务开发的核心功能了,微服务部署后一定要有服务注册和发现的能力,Eureka就是担任这个角色。如果你用过Dubbo的话,Dubbo里服务注册和发现就是通过Zookeeper框架完成的。 Eureka 目前是2.2.x版本,目前官方已经宣布不再维护和更新了,不过Eureka 做注册中心已经在生产环境中大规

qq_37575728的博客 3011

记一次,springboot eureka服务jar包启动,eureka端口配置不生效,eureka服务端口号发生了变更

eureka服务采用jar包部署方式,配置文件中配置端口号为8761,但是项目启动后自动变更了为8081,其他服务也莫名其妙报表和视图不存在,各个服务无法连接,但是在各个jar包中的配置文件完全是正确的。网上有很多说法,就不再提了,这里记一次自己遇到的情况。 端口发生变更,可能是jar包外存在配置文件,jar包部署时,jar包应用会优先读取同级目录下的配置文件进行加载,正好由于自己修改多个项目配置文件,在jar包同级目录下存放了配置文件,所以jar包在启动时都优先加载了j...

oqq0147的专栏 1679

云原生微服务治理 第四章 Spring Cloud Netflix 服务注册/发现组件Eureka

今天我们讲解Spring Cloud微服务的第一代实现:Spring Cloud Netflix Eureka 是 Netflix 公司开发的一款开源的服务注册与发现组件。 Spring Cloud 使用 Spring Boot 思想为 Eureka 增加了自动化配置,开发人员只需要引入相关依赖和注解,就能将 Spring Boot 构建的微服务轻松地与 Eureka 进行整合。

Java 技术专栏,从入门到精通,熟悉企业级开发 2万+

【Spring Cloud实战:Eureka】服务注册与发现

Spring Cloud Eureka 服务注册与发现 Spring Cloud Eureka是Spring Cloud Netflix 子项目的核心组件之一,主要用于微服务架构中的服务治理。 文章针对 搭建Eureka注册中心,搭建Eureka客户端,搭建Eureka集群及给Eureka注册中心添加登录认证进行介绍和实操。 Eureka简介 在微服务架构中往往会有一个注册中心,每个微服务都会向注册中心去注册自己的地址及端口信息,注册中心维护着服务名称与服务实例的对应关系。 每个微服务都会定时从注册中心获取

Strive_Peter的博客 2832

Spring Cloud Eureka的使用

Spring Cloud Eureka >🐻 一个服务注册与发现的组件 > - 注重AP(服务可用性) 配置文件详解 集群的使用 服务发现的使用 - 创建一个maven项目(自定义项目名) - 在该项目下新建一个模块(01-eureka)maven项目 - 在该模块下创建多个模块(springboot项目) - 创建模块1:eureka-ser

没有途径,只有努力 1772

Spring Cloud Eureka服务注册与发现实战示例

微服务架构是一种将单一应用程序作为一套小型服务开发的方法论,每个服务运行在其独立的进程中,并围绕业务能力构建,服务间通过定义良好的API进行通信。微服务架构强调组件化、业务能力、自动化、去中心化和演进式设计,从而实现快速、可重复的部署,以及更灵活的系统扩展和组织结构。如果默认的负载均衡策略不满足特定的业务需求,我们可以实现自己的负载均衡规则。以下是一个简单的自定义负载均衡规则的代码示例:@Override// 自定义选择逻辑// 例如,根据服务器的元数据信息进行过滤,然后随机选择一个。

weixin_30995917的博客 917

SpringCloud 服务注册 Eureka

spring cloud 微服务项目学习第一弹 ~~~~

m0_59588838的博客 798

JAVA进阶面试题:如何设计一个高并发系统?

如何设计一个高并发系统? 面试官心理分析 说实话,如果面试官问你这个题目,那么你必须要使出全身吃奶劲了。为啥?因为你没看到现在很多公司招聘的 JD 里都是说啥,有高并发就经验者优先。 如果你确实有真才实学,在互联网公司里干过高并发系统,那你确实拿 offer 基本如探囊取物,没啥问题。面试官也绝对不会这样来问你,否则他就是蠢。 假设你在某知名电商公司干过高并发系统,用户上亿,一天流量几十亿,高峰期并发量上万,甚至是十万。那么人家一定会仔细盘问你的系统架构,你们系统啥架构?怎么部署的?部署了多少台机器

uuop155的博客 1019

解决Android UVCCamera stopPreview 报错 崩溃 闪退 问题

在使用libuvccamera库的UVCCamera时,经常在调用stopPreview关闭预览的时候,app直接崩溃闪退了,经过综合各种修改源码的方案,已解决这个问题,以下请参考: 首先找到android_usbfs.c,linux_usbfs.c两个原文件,在两个文件中都可以找到这段代码,按如下示例修改: 修改前: for (i = 0; i < num_urbs; i++) { if (urb == tpriv->iso_urbs[i]) { urb_idx = i + 1;

hanye2020的博客 3576

Eureka:Spring Cloud服务注册与发现组件

转载自学用。。。。。Eureka 一词来源于古希腊词汇,是“发现了”的意思。在软件领域,Eureka 是 Netflix 公司开发的一款开源的服务注册与发现组件。Spring Cloud 将 Eureka 与 Netflix 中的其他开源服务组件(例如 Ribbon、Feign 以及 Hystrix 等)一起整合进 Spring Cloud Netflix 模块中,整合后的组件全称为 Spring Cloud Netflix Eureka。

m0_47040562的博客 1892

C语言--第三大的数

第三大的数 给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数. 示例1: 输入: [3, 2, 1] 输出: 1 解释: 第三大的数是 1. 示例2: 输入: [1, 2] 输出: 2 解释: 第三大的数不存在, 所以返回最大的数 2 . ...

loreal8的博客 2131

Spring Cloud Eureka:服务注册与发现

Spring Cloud Eureka:服务注册与发现

wei_shuo的博客 2885

Scratch(四十一):升级版垃圾分类

哈喽,大家好!之前给大家展示过“Scratch(二十四):垃圾分类”。今天呢,给大家展示的Scratch是`升级版垃圾分类`。接下来,我们一起看一下效果吧。

我可以很大侠的博客 6868

Qt基础之十九:进程与QProcess

进程就是一个程序的执行实例,也就是正在运行的程序。对操作系统来说,进程就是一个担当分配系统资源CPU时间、内存的实体。在Qt 中,我们使用QProcess来表示一个进程。这个类可以允许我们的应用程序启动一个新的外部程序,并且与这个程序进行通讯。当外部程序开始启动时,QProcess的状态为Starting;外部程序已经启动时,QProcess的状态为Running,并发送started()信号;当外部层序退出了,QProcess的状态为NotRunning(初始状态),并发送finished()信号。

草上爬的博客 1万+

Spring Cloud 中的服务注册与发现: Eureka详解

在早期的架构体系中,集群概念尚未普及,机器数量较少,那时直接使用 DNS + Nginx 就能满足几乎所有服务的发现需求,相关注册信息直接配置在 Nginx 中。然而,随着微服务的兴起和流量的急剧增长,机器规模不断扩大,且机器上下线行为频繁。此时,依靠运维人员手动维护这些配置信息变得非常麻烦。于是,开发者们期望有一个工具,它能维护一个服务列表,机器上线、宕机等信息都能自动更新到这个服务列表上,客户端获取这个列表后可直接进行服务调用,这就是注册中心。服务提供者(Server)

Y_1215的博客 1505

RTDETR最强结构图 | 包含模型整体结构图 | 全模块展开图 | AiFi模块展开图

RT-DETR 最全结构图

Coding... 9598

Eureka:Spring Cloud服务注册与发现组件(非常详细)

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击人工智能教程​​Eureka 一词来源于古希腊词汇,是“发现了”的意思。在软件领域,Eureka 是 Netflix 公司开发的一款开源的服务注册与发现组件。将 Eureka 与 Netflix 中的其他开源服务组件(例如 Ribbon、Feign 以及 Hystrix 等)一起整合进Cloud Netflix 模块中,整合后的组件全称为 Spring Cloud Netflix Eureka。

了解➔熟悉➔掌握➔精通 1043

专栏目录:Linux 内存管理子系统的进化——从 MM 到 HMM

专栏梳理了Linux内存管理子系统从经典MM到异构内存管理(HMM)的演进历程。内容分为六大部分:首先介绍经典MM基础,包括虚拟地址空间、页表、VMA等核心机制;其次分析MM通用框架如页表遍历、NUMA迁移等;然后探讨设备内存引入的关键技术,如ZONE_DEVICE和dev_pagemap;接着深入解析HMM核心机制及其与DMA的集成;随后通过多个实际驱动案例展示HMM应用;最后讨论大页支持等进阶主题。专栏采用"经典机制→问题→扩展方案"的三段式结构,帮助开发者理解Linux如何通过HMM实现设备内存管理。

图形/计算GPU的驱动与虚拟化技术分享园地 874

2、TrustZone(内含链接)——长期学习内容

ARM系列学习路径整理,希望对大家有用。

HoneyIC的博客 232

五分钟学会 Spring Cloud Eureka:服务注册与发现

大家好,我是码弟

码上代码的博客 1642

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

服务注册与发现-Spring Cloud Netflix-Eureka

Eureka进行服务注册与发现

爪哇岛咖啡种植农场 1614

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Spring Cloud系列—Eureka服务注册/发现

Zookeeper节点存在地位划分,主要是Leader、Follower或Observer,这就意味Leader节点故障需要进行重新选举Leader,存在一定时间的服务不可用。,指同一时间无论访问主节点还是从节点获得的数据是一致的(强一致性,弱一致性是主节点涉及修改后由于同步需要时间,因此存在一定时间的不一致)。是指服务提供方启动时主动向服务注册中心注册服务,并定期向注册中心发送心跳包,汇报自身存活状态。是指服务消费者要调用服务提供方接口时,先去服务注册中心查询服务相关信息,比如地址等。

sniper_fandc的博客 1197

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Spring-cloud 微服务 服务注册_服务发现-Eureka

介绍了注册中心 Eureka 的使用,以及对应的CAP理论,Spring cloud 项目中 如何创建eureka项目服务注册与服务发现

m0_74209411的博客 1621

Java直通车系列39【Spring Cloud】(服务注册与发现Eureka)

Java直通车系列正在连载更新中,更新的内容包括JSP、Spring MVC、Spring Boot、Spring Cloud完整学习资料以及详细解释代码示例,关注我,持续学习。

TEUTEU的博客 1474
上一篇: Spring Cloud整合Spring Boot(服务提供者和服务消费者)
下一篇: Spring Cloud 自定义Eureka Ribbon负载均衡策略
程序员null
博客等级 码龄11年 1304粉丝 124原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值