如何在Java应用中实现服务发现与注册:Eureka与Consul的实战应用

ops/2024/11/9 16:44:59/

如何在Java应用中实现服务发现与注册:Eureka与Consul的实战应用

大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在微服务架构中,服务发现与注册是一个非常重要的部分。今天我们来聊聊如何在Java应用中使用Eureka和Consul进行服务发现与注册。

一、Eureka服务注册与发现

Eureka是Netflix开源的一个服务发现框架,它提供了服务注册和发现的功能。下面是如何在Java应用中集成Eureka的实战代码。

1. Eureka服务端配置

首先,创建一个Eureka Server应用。需要在pom.xml中引入Eureka Server的依赖:

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

然后,在启动类上加上@EnableEurekaServer注解:

java">package cn.juwatech.eureka;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}
}

最后,配置application.yml

server:port: 8761eureka:instance:hostname: localhostclient:register-with-eureka: falsefetch-registry: falseserver:wait-time-in-ms-when-sync-empty: 0

2. Eureka客户端配置

Eureka客户端需要将服务注册到Eureka Server上。在pom.xml中添加以下依赖:

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

启动类添加@EnableEurekaClient注解:

java">package cn.juwatech.eureka;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@SpringBootApplication
@EnableEurekaClient
public class EurekaClientApplication {public static void main(String[] args) {SpringApplication.run(EurekaClientApplication.class, args);}
}

配置application.yml

spring:application:name: juwatech-serviceeureka:client:service-url:defaultZone: http://localhost:8761/eureka/

3. 服务发现示例

服务发现可以通过RestTemplateFeignClient来实现:

java">package cn.juwatech.eureka;import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
public class ServiceDiscoveryController {private final DiscoveryClient discoveryClient;public ServiceDiscoveryController(DiscoveryClient discoveryClient) {this.discoveryClient = discoveryClient;}@GetMapping("/services")public List<ServiceInstance> getServices() {return discoveryClient.getInstances("juwatech-service");}
}

二、Consul服务注册与发现

Consul是HashiCorp公司提供的服务发现与配置工具。接下来看看如何使用Consul进行服务注册与发现。

1. Consul服务端配置

在使用Consul之前,需要先安装并启动Consul Server,可以在本地运行以下命令启动Consul:

consul agent -dev

2. Consul客户端配置

与Eureka类似,首先引入Consul依赖:

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

然后,在启动类中添加@EnableDiscoveryClient注解:

java">package cn.juwatech.consul;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication
@EnableDiscoveryClient
public class ConsulClientApplication {public static void main(String[] args) {SpringApplication.run(ConsulClientApplication.class, args);}
}

配置application.yml

spring:application:name: juwatech-servicecloud:consul:host: localhostport: 8500discovery:service-name: juwatech-service

3. Consul服务发现示例

可以通过DiscoveryClient来获取注册到Consul的服务信息:

java">package cn.juwatech.consul;import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
public class ConsulServiceDiscoveryController {private final DiscoveryClient discoveryClient;public ConsulServiceDiscoveryController(DiscoveryClient discoveryClient) {this.discoveryClient = discoveryClient;}@GetMapping("/consul/services")public List<ServiceInstance> getServices() {return discoveryClient.getInstances("juwatech-service");}
}

三、Eureka与Consul的对比

  • 架构:Eureka是一个中心化的服务注册与发现架构,而Consul则支持多数据中心和分布式的服务发现
  • 一致性:Eureka采用AP(可用性和分区容忍性)模式,而Consul采用CP(一致性和分区容忍性)模式。
  • 健康检查:Eureka的健康检查相对简单,而Consul提供了更为丰富的健康检查功能。
  • 配置管理:Consul不仅支持服务发现,还支持KV存储,可以用来做配置管理。

总结

本文介绍了如何在Java应用中使用Eureka和Consul进行服务注册与发现的实战应用。无论是Eureka还是Consul,它们各有优缺点,选择哪种技术需要根据实际项目需求来定。通过这些示例代码,相信你可以更好地理解服务注册与发现的具体实现。

本文著作权归聚娃科技微赚淘客系统开发者团队,转载请注明出处!


http://www.ppmy.cn/ops/112465.html

相关文章

【python版】示波器输出的csv文件(时间与电压数据)如何转换为频率与幅值【方法⑤】

将示波器输出的 CSV 文件中包含的时间和电压数据转换为频率和幅值数据&#xff0c;通常涉及到信号的频谱分析。下面是一步一步的详细说明&#xff1a; 1、读取 CSV 文件 首先&#xff0c;需要读取 CSV 文件中的时间和电压数据。假设 CSV 文件包含 Time 和 Voltage 两列数据。…

C语言 | Leetcode C语言题解之第413题等差数列划分

题目&#xff1a; 题解&#xff1a; int numberOfArithmeticSlices(int* nums, int numsSize) {if (numsSize 1) {return 0;}int d nums[0] - nums[1], t 0;int ans 0;// 因为等差数列的长度至少为 3&#xff0c;所以可以从 i2 开始枚举for (int i 2; i < numsSize; i…

Qt布局管理器

文章目录 QVBoxLayOut代码创建图形化创建 QHBoxLayout布局管理器嵌套QGridLayout代码示例拉伸系数 QFormLayoutQSpacerItem QVBoxLayOut 之前将控件放在界面上&#xff0c;都是通过手动的方式进行的&#xff0c;这种方式不精确&#xff0c;也无法对窗口大小进行自动识别。 Qt引…

MySQL_数据库基本操作

课 程 推 荐我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448;入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448;虚 拟 环 境 搭 建 &#xff1a;&#x1…

15.5 创建监控控制平面的service

本节重点介绍 : k8s中service的作用和类型创建k8s控制平面的service 给prometheus采集用&#xff0c; 类型clusterIp kube-schedulerkube-controller-managerkube-etcd service的作用 Kubernetes Service定义了这样一种抽象&#xff1a; Service是一种可以访问 Pod逻辑分组…

Python快速入门 —— 第五节:接口开发

第五节&#xff1a;接口开发 目标&#xff1a; 学习使用Flask框架开发简单的Web接口&#xff0c;实现对学生信息的增删改查&#xff0c;通过HTTP请求与应用交互。 内容&#xff1a; Flask简介&#xff1a; Flask是一个轻量级的Python Web框架&#xff0c;使用简单&#xff0…

【乐企-业务篇】乐企前置条件规则枚举

乐企前置条件规则枚举 代码 /*** User: yanjun.hou* Date: 2024/9/5 09:34* Description:乐企前置条件规则枚举 (具体顺序自己按需调整)*/ public enum LQRuleEnum {TAX_PAYER_RISK_INFO(1, "纳税人风险信息"),TAX_PAYER_BASIC_INFO

基于python+django+vue的二手电子设备交易平台

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的二…