服务发现与注册:Eureka与Consul

news/2024/9/11 3:55:31/ 标签: eureka, consul

在微服务架构中,服务发现与注册是一个非常重要的部分。通过服务发现机制,微服务能够相互找到并进行通信,而不需要了解彼此的具体地址。本文将详细介绍两种主流的服务发现与注册框架:Eureka和Consul,并提供相应的代码示例。

为什么需要服务发现与注册?

在传统的单体应用中,所有组件都运行在同一个进程中,彼此之间的调用是直接的。然而,在微服务架构中,应用被拆分为多个独立部署的服务,这些服务可能运行在不同的主机上。当一个服务需要调用另一个服务时,它需要知道对方的地址(IP和端口)。手动配置和管理这些信息是非常困难的,因此我们需要一种自动化的机制来解决这个问题。

服务发现与注册机制提供了一种解决方案,通过服务注册中心,所有的服务将自己的地址注册到这个中心,调用者可以通过服务注册中心来查找目标服务的地址,从而实现服务的动态发现。

Eureka

Eureka是Netflix开源的一个服务发现与注册框架,属于Spring Cloud生态系统的一部分。Eureka包含两个组件:Eureka Server和Eureka Client。

Eureka Server

Eureka Server是服务注册中心,所有的服务都会注册到这个中心。

搭建Eureka Server

首先,在你的Spring Boot项目中添加以下依赖:

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

创建一个Spring Boot应用主类,并添加@EnableEurekaServer注解:

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}
}

application.yml中进行Eureka Server的配置:

server:port: 8761eureka:client:registerWithEureka: falsefetchRegistry: falseinstance:hostname: localhost

运行这个Spring Boot应用,你的Eureka Server就搭建好了。

Eureka Client

Eureka Client是需要注册到Eureka Server的服务。

搭建Eureka Client

在你的Spring Boot项目中添加以下依赖:

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

创建一个Spring Boot应用主类,并添加@EnableEurekaClient注解:

@SpringBootApplication
@EnableEurekaClient
public class EurekaClientApplication {public static void main(String[] args) {SpringApplication.run(EurekaClientApplication.class, args);}
}

application.yml中进行Eureka Client的配置:

server:port: 8080eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/

运行这个Spring Boot应用,它将自动注册到Eureka Server。

使用Eureka进行服务调用

在一个服务中通过RestTemplate来调用另一个服务:

@RestController
public class TestController {@Autowiredprivate RestTemplate restTemplate;@GetMapping("/test")public String test() {return restTemplate.getForObject("http://eureka-client-service/hello", String.class);}
}

确保在Spring Boot配置中启用负载均衡:

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

Consul

Consul是HashiCorp开源的一个服务发现与注册框架,同时还提供健康检查、KV存储等功能。Consul包含两个组件:Consul Server和Consul Client。

搭建Consul Server

首先,下载并安装Consul。可以参考Consul官方文档进行安装。

启动Consul Server:

consul agent -dev

Consul Client

Consul Client是需要注册到Consul Server的服务。

搭建Consul Client

在你的Spring Boot项目中添加以下依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>

创建一个Spring Boot应用主类:

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

application.yml中进行Consul Client的配置:

server:port: 8080spring:cloud:consul:host: localhostport: 8500discovery:serviceName: consul-client-service

运行这个Spring Boot应用,它将自动注册到Consul Server。

使用Consul进行服务调用

在一个服务中通过RestTemplate来调用另一个服务:

@RestController
public class TestController {@Autowiredprivate RestTemplate restTemplate;@GetMapping("/test")public String test() {return restTemplate.getForObject("http://consul-client-service/hello", String.class);}
}

确保在Spring Boot配置中启用负载均衡:

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

总结

通过这篇博客,我们了解了服务发现与注册的基本概念,并详细介绍了Eureka和Consul的使用方法。通过代码示例,我们可以看到如何搭建Eureka Server和Client,如何搭建Consul Client,以及如何通过RestTemplate进行服务调用。希望这篇博客能够帮助你更好地理解和使用服务发现与注册机制。



http://www.ppmy.cn/news/1474712.html

相关文章

Web开发 —— 放大镜效果(HTML、CSS、JavaScript)

目录 一、需求描述 二、实现效果 三、完整代码 四、实现过程 1、HTML 页面结构 2、CSS 元素样式 3、JavaScript动态控制 &#xff08;1&#xff09;获取元素 &#xff08;2&#xff09;控制大图和遮罩层的显隐性 &#xff08;3&#xff09;遮罩层跟随鼠标移动 &…

C# Winform 系统方案目录的管理开发

在做一个中等复杂程度项目时&#xff0c;我们通常有系统全局配置&#xff0c;还要有对应的方案目录的管理和更新。 比如我们有如下需求&#xff1a;开发一个方案管理&#xff0c;可以新建、打开和保存方案&#xff0c;同时还需要保存方案中的各种文件。我设计的采用目录管理和…

【YashanDB知识库】表收集统计信息默认阈值引起SQL执行效率差

【问题分类】性能优化 【关键字】统计信息&#xff0c;阈值&#xff0c;执行计划 【问题描述】表新增87w数据自动收集统计信息任务没有启动导致SQL执行计划变差 【问题原因分析】 CUS_REGISTER_READ 数据总量是18374074&#xff0c;插入81万&#xff0c;统计信息失效的阈值是…

流程图怎么做?有三种制作方法

流程图怎么做&#xff1f;在日常生活和工作中&#xff0c;流程图作为一种直观展示步骤、流程或决策路径的工具&#xff0c;扮演着不可或缺的角色。它不仅能够帮助我们理清思路、规划任务&#xff0c;还能促进团队协作与沟通。那么&#xff0c;如何高效地绘制流程图呢&#xff1…

Objective-C 自定义渐变色Slider

文章目录 一、前情概要二、具体实现 一、前情概要 系统提供UISlider&#xff0c;但在开发过程中经常需要自定义&#xff0c;本次需求内容是实现一个拥有渐变色的滑动条&#xff0c;且渐变色随着手指touch的位置不同改变区域&#xff0c;类似如下 可以使用CAGradientLayer实现渐…

Web开发:一个可拖拽的模态框(HTML、CSS、JavaScript)

目录 一、需求描述 二、实现效果 三、完整代码 四、实现过程 1、HTML 页面结构 2、CSS 元素样式 3、JavaScript动态控制 &#xff08;1&#xff09;获取元素 &#xff08;2&#xff09;显示\隐藏遮罩层与模态框 &#xff08;3&#xff09;实现模态框拖动效果 一、需求…

VMware安装Ubuntu以及利用vscode远程Ubuntu

一、VMware安装Ubuntu &#xff08;1&#xff09;VMware安装Ubuntu主要参考此文VMware虚拟机安装Ubuntu22.04图文教程&#xff08;超详细&#xff01;&#xff01;&#xff01;&#xff09;。 &#xff08;2&#xff09;VMware密钥参考此文24年VMware 17密钥(附下载链接&#…

《C++并发编程实战》笔记(一、二)

一、简介 抽象损失&#xff1a;对于实现某个功能时&#xff0c;可以使用高级工具&#xff0c;也可以直接使用底层工具。这两种方式运行的开销差异称为抽象损失。 二、线程管控 2.1 线程的基本控制 1. 创建线程 线程相关的管理函数和类在头文件&#xff1a; #include <…

Memcached高并发挑战:性能优化与实战策略

标题&#xff1a;Memcached高并发挑战&#xff1a;性能优化与实战策略 在高并发的网络应用场景中&#xff0c;Memcached作为一项高效的分布式内存缓存系统&#xff0c;其性能表现尤为关键。然而&#xff0c;面对海量的请求和数据&#xff0c;Memcached的性能如何&#xff0c;以…

Spring Boot 框架知识汇总

1、什么是SpringBoot&#xff1f; 通过Spring Boot&#xff0c;可以轻松地创建独立的&#xff0c;基于生产级别的Spring的应用程序&#xff0c;您可以“运行"它们。大多数Spring Boot应用程序需要最少的Spring配置&#xff0c;集成了大量常用的第三方库配置&#xff0c;使…

【力扣C语言】每日一题—第50题,Pow(x,n)

题目 实现x的n次幂。 问题分析&#xff1a; 当n大于零&#xff0c;等于零&#xff0c;小于零时都需要分析 思路&#xff1a;反复迭代&#xff0c;利用通过二进制位进行缩短计算时间。 力扣通过代码&#xff1a; ​ double myPow(double x, int n) {long nnn;double ret1;…

R语言学习笔记3-基本类型篇

R语言学习笔记-基本类型篇 基本类型介绍数值型&#xff08;Numeric&#xff09;整数型&#xff08;Integer&#xff09;浮点数型&#xff08;Double&#xff09;数值运算数值型 NA&#xff08;缺失值&#xff09; 字符型&#xff08;Character&#xff09;字符型的特点和用途基…

C++进阶:继承和多态

文章目录 ❤️继承&#x1fa77;继承与友元&#x1f9e1;继承和静态成员&#x1f49b;菱形继承及菱形虚拟继承&#x1f49a;继承和组合 ❤️多态&#x1fa77;什么是多态&#xff1f;&#x1f9e1;多态的定义以及实现&#x1f49b;虚函数&#x1f49a;虚函数的重写&#x1f499…

鸿蒙开发工程师面试题-架构篇

1. 假如让你负责鸿蒙App架构设计&#xff0c;你会关注哪些方面&#xff1f; 分层架构设计&#xff1a; 将应用划分为产品定制层、基础特性层和公共能力层&#xff0c;以降低层间依赖性&#xff0c;提升代码可维护性。通过分层架构设计&#xff0c;进一步明确每层的职责和层间交…

实现基于Elasticsearch的搜索服务

实现基于Elasticsearch的搜索服务 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. Elasticsearch简介 Elasticsearch是一个开源的分布式搜索引擎&#xff0c;提供强大的全文搜索和分析功能。本文…

快速上手文心一言:让创作更轻松

引言 在当今信息爆炸的时代&#xff0c;如何高效地进行内容创作成为了许多人的关注焦点。百度推出的文心一言&#xff0c;作为一款强大的AI写作工具&#xff0c;为内容创作者提供了全新的解决方案。本文将带您快速上手文心一言&#xff0c;让创作变得更轻松、更高效。 什么是…

FastReport 指定sql,修改数据源 ( 非DataSet修改 )

FastReport 指定sql&#xff0c;修改数据源&#xff0c;非DataSet修改 介绍报告文件&#xff1a; codetest.frx 文件核心代码&#xff1a;&#xff08;扩展&#xff09;小结一下&#xff1a; 介绍 在FastReport中&#xff0c;经常会遇到需要给 sql 加条件的情况。 &#xff0…

LeetCode 445.两数相加||

1.题目要求: 给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外&#xff0c;这两个数字都不会以零开头。示例1&#xff1a;输入&#xff1a;l1 [7,2,4,3], l2 …

什么是 SpringBoot

SpringBoot 是由 Pivotal 团队提供的一个开源框架&#xff0c;旨在简化基于 Spring 框架的应用程序开发。它通过提供一套可用的默认配置和一系列有用的功能&#xff0c;使开发者能够迅速创建独立、生产级的 Spring 应用程序&#xff0c;而无需进行大量的配置。 SpringBoot 的设…

华为HCIP Datacom H12-821 卷38

1.多选题 下面关于 BGP中的公认属性的描述&#xff0c;正确的是 A、公认必遵属性是所有BGP路由器都识别&#xff0c;且必须存在于Updata消息中心 B、BGP必须识别所有公认属性 C、公认属性分为公认必遵和可选过渡两种 D、公认任意属性是所有BGP造由器都可以识别&#xff0c…