从零开始 Spring Cloud 2:Eureka 注册中心

news2024/11/19 6:52:26

从零开始 Spring Cloud 2:Eureka 注册中心

image-20230714102655393

图源:laiketui.com

Eureka 常被用作 Spring Cloud 的注册中心,用于注册微服务的接口提供方。

在上一篇文章中,我们实现了两个子模块互相调用接口,但存在一个缺陷,接口的主机名是硬编码的。这样很难维护,且没法做集群。这个问题正好可以用 Eureka 解决。

本文将学习如何在项目中添加 Eureka 注册中心,以及将接口注册到 Eureka

本文的示例项目基于上一篇文章构建的项目。

添加 Eureka 服务端

按照上一篇文章介绍过的方式,添加一个 Maven 子模块 eureka-server

image-20230714143404355

依赖

在子模块 eureka-server 中添加 eureka 服务端的依赖:

<dependencies>
    <!--eureka服务端-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
</dependencies>

启动类

添加一个根包 org.example.shopping.eureka,并添加启动类:

package org.example.shopping.eureka;
// ...
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}

不要忘记添加@EnableEurekaServer,否则 Eureka 不能正常启动,会报错。

配置文件

添加配置文件 application.yml

server:
  port: 8090
spring:
  application:
    name: eureka-server
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8090/eureka

这里的配置项 eureka.client.service-url.defaultZone 用于将当前应用注册到指定的 eureka,在eureka-server 这个子模块中,意味着将自己注册到自己。这样设计是有意义的,eureka 本身也可以做集群,如果那样,可以通过这种方式将 eureka 注册到所在的集群服务器。

控制面板

现在访问 http://localhost:8090/ 就能看到 Eureka 的控制面板:

image-20230714152335990

其中的 Instances currently registered with Eureka 显示的是当前注册到 Eureka 上的微服务实例。之所以说是“实例”,是因为同一个微服务应用可以部署多个实例,作为集群使用,此时接口调用时就可以用负载均衡的方式选取其中一个调用。

注册服务

下面将子模块 shopping-user 注册到 Eureka,这样子模块 shopping-order 就可以通过 Eureka 获取接口地址并调用接口,不用再将接口硬编码了。

依赖

在在模块 shopping-userPOM 中添加 Eureka 客户端的依赖:

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

如果 Maven 不能正常下载依赖,可以选取一个指定版本的依赖,我这里使用了3.1.3(服务端也使用了这个版本):

image-20230714161107212

配置文件

修改配置文件,添加应用名和 Eureka 服务端地址:

spring:
  application:
    name: shopping-user
    eureka:
client:
  service-url:
    defaultZone: http://localhost:8090/eureka

测试

现在启动子模块 shopping-usereureka-server,打开 eureka 的控制面板:

image-20230714161550859

可以看到两个注册的服务,Status 列也可以看到服务地址。

启动多个实例

Service 面板中右键 Copy Configuration

image-20230714162044570

如果没有 Service 窗口,可以通过菜单 view->tool windows->services 开启。

为另一个运行实例起一个名字,并添加启动参数 -Dserver.port=8082

image-20230714162331631

现在 Not Started 菜单下会出现刚添加的启动配置。

image-20230714162536736

右键 run 启动。

现在在 Eureka 的控制面板就能看到启动了两个 shopping-user 实例。

image-20230714162742284

使用服务

依赖

子模块 shopping-order 要使用 Eureka 获取服务地址,同样需要添加 Eureka 客户端依赖:

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

配置文件

修改配置文件,添加 Eureka 服务地址:

spring:
  application:
    name: shopping-order
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8090/eureka

负载均衡

启用负载均衡,这里只需要为RestTemplatebean 方法添加@LoadBalanced注解:

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

服务调用

修改OrderService,将硬编码的接口地址修改为使用 Eureka 上注册的服务名:

@Service
public class OrderService {
	// ...
    public Order findOrderById(Long orderId) {
        Order order = orderMapper.findById(orderId);
        String url = String.format("http://shopping-user/user/%d", order.getUserId());
		Result<?> result = restTemplate.getForObject(url, Result.class);
        // ...
    }
}

现在再尝试访问接口 http://localhost:8080/order/101,可以通过 IDEA 的 services 窗口查看到 shopping-user 的其中一个实例响应了接口调用。

The End,谢谢阅读。

本文的完整示例代码可以从这里获取。

参考资料

  • IDEA开启并配置services窗口

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

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

相关文章

旅游管理系统的设计与实现(论文+源码)_kaic

摘 要 旅游业走过了改革开放&#xff0c;到现在依旧蓬勃发展。但是放眼国际社会&#xff0c;我们在旅游业发展的深度和广度上所做的努力还远远不够。在中国&#xff0c;旅游业也将成为经济崛起中的重要一环。目前&#xff0c;我们生活在一个信息时代里。无论是工作&#xff0c;…

哈希表的原理

哈希概念 线性表、树结构的查找方式都是以关键字的比较为基础&#xff0c;查找效率比较低&#xff0c;顺序表的时间复杂度是O&#xff08;n&#xff09;&#xff0c;平衡树中为树的高度&#xff0c;即O&#xff08;logn&#xff09;&#xff0c;搜素的效率取决于搜索过程的元素…

归并排序的递归和非递归

基本思想 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff08;Divide andConquer&#xff09;的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先使每个子序列有序&a…

OpenCV项目开发实战--详细介绍如何进行边缘轮廓检测 (Python/C++)-附源码

使用轮廓检测​​,我们可以检测对象的边界,并轻松在图像中定位它们。它通常是许多有趣应用的第一步,例如图像前景提取、简单图像分割、检测和识别。 因此,让我们使用 OpenCV 来了解轮廓和轮廓检测,并亲眼看看如何使用它们来构建各种应用程序。 轮廓在计算机视觉中的应用

latex2【图片、公式、矩阵】

图片 语法&#xff1a; \includegraphics{排队论模型.png} 看起来很别扭是吧&#xff0c;需要进行“修饰”&#xff1a; 当然&#xff0c;这样也很丑&#xff0c;一般写论文可以用以下的格式&#xff1a; \begin{figure}[H] \caption{问题一模型示意图} \label{paiduimx} …

【企业架构工具】2023 年 18 大企业架构工具

这些流行和新兴的 EA 工具为企业提供了支持企业架构和数字化转型所需的一切。 企业架构系统并不总是必不可少的。据推测&#xff0c;在 1940 年代&#xff0c;国际商业机器公司的一位领导人小托马斯沃森 (Thomas Watson Jr.) 曾说过&#xff1a;“我认为大约有 5 台计算机的全球…

基于SpringBoot+vue的校园疫情防控系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

Linux内核网络-拥塞控制系列(一)

谈起网络拥塞控制&#xff0c;大家可能很熟悉八股文中的"加法增大“、”乘法减小“、”慢开始“、“拥塞避免”、“快重传”、“快恢复”等概念。没错&#xff0c;这是一种经典网络拥塞控制算法的基础理论&#xff0c;但在实际的实现时不同的拥塞控制算法&#xff0c;有很…

【Android Camera开发】深入理解相机ISP(图像信号处理)必看文章

​原文&#xff1a;https://blog.51cto.com/u_16081664/6224003 作者&#xff1a;mb64411cc0e9333 凡是和图像领域工作的人&#xff0c;都会经常听到ISP&#xff08;Image Signal Process&#xff0c;图像信号处理&#xff09;&#xff0c;知道ISP对图像质量非常重要。比如华为…

电能管理系统在路店上的应用 安科瑞 许敏

摘要&#xff1a;随着企业改革的不断深入&#xff0c;对现代化用电管理的水平要求越来越高&#xff0c;准确、快速、经济的获得用电回路的各类数据进行用电分析、负荷管理、表计运行状况监测、电费自动结算的基础。同时也是提高企业经济效益的有效手段。近年来技术人员对监控系…

嵌入式程序开发者的数量剧增

随着物联网、智能设备和嵌入式系统的快速发展&#xff0c;嵌入式程序开发领域的需求不断增长&#xff0c;因此嵌入式程序开发者的数量也在剧增。这种趋势在过去几年中已经变得非常明显。 以下是导致嵌入式程序开发者数量剧增的一些主要原因&#xff1a; 我这里刚好有嵌入式、单…

Mac平台下如何制作pkg安装包以及rpath设置

打包工具介绍 Mac平台规范包可以使用Packages工具。下载地址 打包前准备工作 创建一个目录 macProject macProject目录中是以下目录结构 myProject.app└── Contents├── Info.plist├── MacOS├── res├── libmymath.dylib├── Frameworks└── Resources├…

Hive多行转多列,多列转多行

hive中的行列转换包含单行、多行、单列、多列&#xff0c;所以一共有四种组和转换结果。 一、多行转多列 原始数据表 目标结果表 分析&#xff1a;目标表中的a和b是用分组形成&#xff0c;所以groupby字段选用原始表中col1&#xff0c;c、d、e是原始表中的行值&#xff0c;…

数据结构(王道)——线性表的存储结构之循环表

一、循环单链表 定义&#xff1a; 循环单链表代码实现 创建并初始化、判断循环单链表是否为空、判断结点p是否为循环单链表的表尾结点的代码操作。 二、循环双链表 定义&#xff1a; 循环双链表代码实现 创建并初始化、判断循环双链表是否为空、判断结点p是否为循环双链表的…

橙河网络:怎么搭建海外问卷网站呢?

大家好&#xff0c;我是橙河&#xff0c;如果你想要搭建海外问卷网站赚钱&#xff0c;看我这篇文章就行了。 搭建网站&#xff0c;本身并不复杂&#xff0c;自己会敲代码就自己搞&#xff0c;不会就花点钱外包给别人。 搭建好问卷网站以后&#xff0c;重点来了&#xff0c;你需…

Learning Spatial and Spatio-Temporal Pixel

Learning Deformable Kernels for Image and Video Denoising 作者&#xff1a; Xiangyu Xu 商汤科技SenseTime Research 论文思想&#xff1a;一是将传统的双边滤波算法与CNN结合起来&#xff0c;二是用变形卷积来做多帧对齐的问题&#xff0c;三还是在raw上进行处理的。 …

WSL2 忘记用户密码

步骤一&#xff1a;将默认用户切换为root 在Windows里启动命令提示符&#xff0c;输入&#xff1a; ubuntu2004 config --default-user root这就已经将我的ubuntu20.04的默认用户切换为了root&#xff0c; 不同的WSL版本可能命令的第一个符号不一样&#xff0c;区别如下图&am…

Acrel-3000电能管理系统某公司项目中的应用 安科瑞 许敏

摘要&#xff1a;用户对自身用能的管理意识提升&#xff0c;促使用户侧电力配电系统在商业、工业以及民用区域的普及。系统针对用户侧主要的用能节点&#xff0c;设计安装智能仪表&#xff0c;再通过后台系统来实时监控各用能回路的工作状态、用电量、用水量、用气量数数据的采…

自动驾驶商用驶入“快车道”,汽车软件厂商如何“抢市”?

L3级及以上自动驾驶的商业化进程正在驶入“快车道”。 一方面&#xff0c;高阶自动驾驶的相关法规及标准不断出台&#xff0c;为自动驾驶行业的发展注入了“强心剂”。 比如工业和信息化部副部长辛国斌就曾表示&#xff0c;将启动智能网联汽车准入和上路通行试点&#xff0c;…

【嵌入式开发 Linux 常用命令系列 5 -- history 与 “!“ 巧妙配合】

文章目录 history 命令介绍history 命令与 “&#xff01;”运行先前执行的命令先前命令的参数传递给新命令两个或多个参数的处理设置 history 命令显示行数以及时间 上篇文章&#xff1a;嵌入式开发 Linux 常用命令系列 4 – git 常用配置及常用命令 history 命令介绍 histo…