【SpringCloud微服务实践】注册与发现(Eureka)

news2024/11/29 10:57:37

注册与发现(Eureka)

注册与发现初实践,注册中心采用SpringCloud全家桶中的Eureka,并配合RestTemplate从Euraka调用微服务。

在前置章节的电影票-用户服务组的基础上升级,摒弃硬编码微服务地址的方案,使用eureka实现微服务的动态发现与调用。

创建注册中心

  1. 引入Eureka Server依赖

新建一个SpringCloud项目,并预装Eureka Server工具包,当然也可以手动在pom文件中引入,记得一定要是带starter的(基于本文采用的2021.0.6版本的spring-cloud):

<dependency>
	<groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
  1. 在启动类上添加@EnableEurekaServer,声明是Eureka服务器
  2. 在配置文件中配置Eureka信息
    • server.port:配置服务器端口
    • eureka.instance:实例配置(单体可以不配)
      • appname:实例名称
      • app-group-name:实例组名,通常为同一个服务下的不同实例所共享
      • hostname:域名,不设置时默认为主机名
      • prefer-ip-address:展示ip地址
    • euraka.client:客户端配置
      • service-url:注册中心的服务地址
      • fetch-registry:获取注册表,作为注册中心无需开启
      • register-with-eureka:是否注册,不做集群可以不注册
server:
  port: 8848
eureka:
  instance:
    appname: eureka-server
    app-group-name: example-1
    hostname: localhost
    prefer-ip-address: true

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

一个简单的Eureka注册中心到这里就完成了,接着我们把用户微服务注册道 Eureka中

微服务注册

  1. 引入Eureka Client依赖,记得要带starter的:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  1. 在启动类上添加@EnableEurekaClient,声明是Eureka客户端
  2. 配置文件中配置客户端信息:
    • spring应用名一定要配,它将作为登记在Eureka中的服务名,到时候是根据服务名解析网络地址
    • 实例名建议配,一个注册多个实例的时候方便区分
    • 其它前头提过了不再赘述
spring:
  application:
  name: user-service

eureka:
  client:
    register-with-eureka: true
    service-url:
      defaultZone: http://localhost:8848/eureka
  instance:
    appname: user-service-1  # 不定义的话默认为应用名application.name
    prefer-ip-address: true

单单作为Eureka的服务提供者到此也完成,接着升级服务消费者ticket

调用微服务

  1. 和提供者一样,引入Eureka Client依赖
  2. eureka相关的配置类似,不再复述;此外把待调用的user服务的信息也写进配置文件吧
api:
  user-service:
    name: user-service  # 服务名
    url: http://127:0:0:1:8081/user/  # 之前章节用的直接调用地址
  1. 重点在于服务发现和调用

获取服务列表

一个服务注册到Eureka中后,Eureka会在自己的注册表中,按服务的名称与服务的真实域名+端口做一一映射,即user-service运行在http://localhost:8081上,登记的是服务名user-service,RestTemplate拿到Eureka的服务注册表后,调用user-service时,请求的是http://user-service,此时会根据注册表把实际的请求路径中user-service解析为查到的实际的localhost:8080,相当于做了一个代理;如果这个服务并未注册或者RestTemplate没有拿到注册表,就只能原路请求,自然请求不到。

获取注册表很简单,在我们的ResTemplate的Bean上加个@LoadBalanced注解即可:

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

@LoadBalanced加了之后,即做到了服务发现又做到了负载均衡

调用远程服务

此时调整我们UserApi中的baseUrl即可:

//@Value("${api.user-service.url}")
@Value("http://${api.user-service.name}/user/")
private String baseUrl;

到这一步,作为消费者的ticket也就完成了,接下来运行三个项目

成果

浏览器访问Eureka服务器的地址http://localhost:8848
此时可以看到包括Eureka在内(之前让Eureka把自己也注册了),总共有3个健康的服务实例:
在这里插入图片描述

此时请求之前的http://localhost:8080/ticket/canibuy?price=200&id=3接口

{
    "code": 200,
    "msg": "余额充足",
    "data": {
        "id": 3,
        "username": "user3",
        "name": "用户3",
        "age": 23,
        "balance": 300.0
    }
}

成功拿到结果!我们通过Eureka+Restemplate成功的实现了微服务的动态发现和调用,至此我们已经正式入门微服务架构。


入门章节采用了Restempl ate+eureka,是因为它们足够经典。在本系列后面,将主要采用openFeign+nacos构建微服务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/512504.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机毕业论文选题推荐|软件工程|系列三

文章目录 导文题目导文 计算机毕业论文选题推荐|软件工程 (***语言)==使用其他任何编程语言 例如:基于(***语言)门窗账务管理系统的设计与实现 得到:基于JAVA门窗账务管理系统的设计与实现 基于vue门窗账务管理系统的设计与实现 等等 题目 基于(***语言) 一体化智慧停车…

86.qt qml-多种粒子特效按钮实现

截图如下所示: 动图如下所示: 支持黑白模式: 1.实现原理 配合之前我们学习的: 82.qt qml-2D粒子系统、粒子方向、粒子项(一)_诺谦的博客-CSDN博客 83.qt qml-初步学习2D粒子影响器(二)_诺谦的博客-CSDN博客 即可实现出来。 以按钮特效3按钮为例:

Google I/O 2023 - Flutter 3.10 发布,快来看看有什么更新吧

核心部分原文链接&#xff1a;https://medium.com/flutter/whats-new-in-flutter-3-10-b21db2c38c73 虽然本次 I/O 的核心 keynote 主要是 AI &#xff0c;但是按照惯例依然发布了新的 Flutter 稳定版&#xff0c;不过并非大家猜测的 4.0&#xff0c;而是 3.10 &#xff0c;Flu…

PING命令的高级用法

对于Windows下ping命令相信大家已经再熟悉不过了&#xff0c;但是能把ping的功能发挥到最大的人却并不是很多&#xff0c;当然我也并不是说我可以让ping发挥最大的功能&#xff0c;我也只不过经常用ping这个工具&#xff0c;也总结了一些小经验&#xff0c;现在和大家分享一下。…

studioone6离线下载电脑版

随着技术的不断进步&#xff0c;音乐家不再将作曲编曲局限在手绘和实体乐器演奏上&#xff0c;各类编曲软件和插件在模拟乐器中无限接近实质&#xff0c;大大简化了编曲作曲的工作。 Studio One6就是其中的佼佼者之一&#xff0c;它不仅支持用户对音频进行剪切编辑混音等后期处…

#VERDI# 关于Verdi如何使用reverse调试

前言 今天我们 一起学习Verdi的一种回退仿真机制。也即&#xff1a;reverse 为了使用verdi reverse debug 机制&#xff0c;以下注意事项必须满足&#xff1a; &#xff08;1&#xff09;Reverse Debug page 必须设置为交互模式&#xff1a;tools-》preferences->Intera…

修改图片大小尺寸如何操作?修改图片大小尺寸的作用

图片在不同场合下需要具备适当的尺寸和分辨率&#xff0c;如果不满足要求&#xff0c;就会影响到其质量和效果。因此&#xff0c;修改图片大小尺寸是一种常见的处理方法&#xff0c;可以让图片更好地适应不同的需求和场景。 修改图片的大小和尺寸可以带来以下几个好处&#xf…

【来点小剧场--爪哇岛寻宝】java实现网络编程,UDP协议写一个简易的回显服务程序

作者&#xff1a;困了电视剧 专栏&#xff1a;《JavaEE初阶》 文章分布&#xff1a;这是一篇关于网络编程的文章&#xff0c;在这篇文章中我会剖析一段回显服务程序的执行步骤和代码编程&#xff0c;希望对你有所帮助&#xff01; 目录 客户端 服务端 总结 客户端 现在我们…

安卓机上 4G 内存跑 Alpaca,欢迎试用轻量级 LLM 模型推理框架 InferLLM

从 LLM 火爆以来&#xff0c;社区已经出现了非常多优秀的模型&#xff0c;当然他们最大的特点就是体积大。最近为了让大模型可以在更低端的设备上运行&#xff0c;社区做了非常多的工作&#xff0c; gptq 实现了将模型进行低比特量化&#xff0c;因此降低了运行大模型对 CPU 内…

Install4j V10安装及简单使用

版本 install4j v10.0(附激活流程) 下载地址 脚本之家夸克网盘 安装 点击Crack生成License 安装后粘贴在最后一步: 实战 准备 之前做过一个git-agent的demo, 本意是用来学习Netty的, 其中包括git-server和git-cli, 我们以git-server为原材料(可执行jar包)进行演示, …

【数据结构与算法】树状数组

Fenwick Tree 树状数组&#xff08;Binary Indexed Tree&#xff0c;又称 Fenwick Tree&#xff09;是一种基于数组实现的数据结构&#xff0c;用于高效地动态维护前缀和。 树状数组可以在 O ( log ⁡ n ) O(\log n) O(logn) 的时间复杂度内进行单点修改和前缀求和操作&#x…

Android studio使用glade7.5编译通过opencv官方例程camera_calibration

Opency官方例程是用glade4.2.1构建的&#xff0c;所以想使用glade7对官方例程重新构建。由于自己对android studio的glade架构不熟悉&#xff0c;走了不少弯路&#xff0c;刚开始使用glade7重新编译opencv官方例程&#xff0c;编译能通过&#xff0c;但是app总是会闪退。 下面这…

ArcGIS API for JavaScript 3.x 添加动态波纹标注

模拟波纹效果基于 arcgis 3.x, 先看效果图&#xff1a; 实现思路 波纹是由两个图层组成&#xff0c;圆点动态圆&#xff0c;主要借助于esri/geometry/Point和esri/symbols/SimpleMarkerSymbol,这两个类。 Point创建点&#xff0c; SimpleMarkerSymbol创建一个圆&#xff0c…

理化生实验室常用实验仪器清单及用途说明

理化生实验室除了常见的玻璃器皿&#xff0c;作为实验室中同样重要的一部分&#xff0c;实验仪器也是不可或缺&#xff0c;其可以有效地提高实验精度与效率。下面&#xff0c;就为大家盘点一下实验室都有哪些常见的实验仪器。 显微镜的用途主要用于放大微小物体成为人的肉眼所…

Acceptance-Rejection Sampling

Acceptance-Rejection Sampling 文章目录 Acceptance-Rejection Sampling[toc]1 接受拒绝采样2 Acceptance-Rejection 采样实现 1 接受拒绝采样 给定随机变量 X X X服从pdf为 f ( x ) f(x) f(x)的分布&#xff0c;例如 f ( x ) f(x) f(x)为正态概率密度函数&#xff0c;我们可…

js 字符串拼接的4种方法

一、使用连接符 把想要连接的字符串串起来 let shy 帅哥 let a 我是 shy console.log(a) // 我是帅哥 二、模板字符串 模板字符串&#xff08;template string&#xff09;是增强版的字符串&#xff0c;用反引号&#xff08;&#xff09;标识&#xff0c;特点&#xff1a…

【C++】-6- 模板初阶

文章目录 引入——泛型编程一、函数模板1.函数模板格式2.函数模板原理3.模板的实例化4.模板参数的匹配原则 二、类模板0.引入1.类模板的定义格式2.类模板的实例化 引入——泛型编程 如果我们需要实现不同数据类型的Swap函数&#xff0c;需要手写很多内容类似的结构。如下。 v…

【Gragph Data Mining】VF2算法 — 图同构匹配的算法

VF2算法是一种用于图同构匹配的算法&#xff0c;可以判断两个图是否同构。VF2算法最初由L. P. Cordella等人在1981年提出&#xff0c;后经过多次改进和优化&#xff0c;已成为常用的图同构匹配算法之一。VF2算法的基本思想是通过递归地搜索两个图的节点匹配&#xff0c;从而判断…

总结847

学习目标&#xff1a; 月目标&#xff1a;5月&#xff08;张宇强化前10讲&#xff0c;背诵15篇短文&#xff0c;熟词僻义300词基础词&#xff09; 周目标&#xff1a;张宇强化前3讲并完成相应的习题并记录&#xff0c;英语背3篇文章并回诵 每日必复习&#xff08;5分钟&#…

概率密度函数可视化

概率密度函数可视化 文章目录 概率密度函数可视化[toc]1 一维随机变量情形2 二维随机变量情形 1 一维随机变量情形 以正态概率密度函数为例&#xff0c;其中位置参数为 μ \mu μ&#xff0c;尺度参数为 σ \sigma σ&#xff0c; f ( x ) 1 2 π σ e − ( x − μ ) 2 2 σ…