Eureka Server开关流程

       Eureka Server 是 Netflix 开发的注册中心,Eureka Server 的配置搭建比较简单,通过一个简单的依赖,再通过在启动类上增加一个注解,还有简单的配置文件就可以了。那 SpringBoot 的项目是如何通过注解变成注册中心呢?其实流程比较简单,本文简单的整理了一下它的开关流程。

Eureka Server 开关流程

        使用 Eureka Server 时需要引入 Eureka Server 的 starter 依赖 spring-cloud-starter-netflix-eureka-server,这是最基本的一步。通过该 starter 依赖,Maven 会自动的下载其相关具体依赖,Eureka Server 的具体依赖是 spring-cloud-netflix-eureka-server。通过该依赖的 Jar 包中可以找到 spring.factories 的配置,该配置文件如下:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  org.springframework.cloud.netflix.eureka.server.EurekaServerAutoConfiguration

       通过上面的配置文件,我们来查找 EurekaServerAutoConfiguration 这个类。打开该类以后,在该类上有一个注解,该注解如下:

@ConditionalOnBean({Marker.class})

        到这一步就基本可以确定是否加载 EurekaServerAutoConfiguration 这个类了。

        接着,我们去看一下 @EnableEurekaServer 这个注解,该注解有一个 @Import 的注解,如下:

@Import({EurekaServerMarkerConfiguration.class})

       此时,看一下 EurekaServerMarkerConfiguration 这个类,代码如下:

public class EurekaServerMarkerConfiguration {
    public EurekaServerMarkerConfiguration() {
    }

    @Bean
    public EurekaServerMarkerConfiguration.Marker eurekaServerMarkerBean() {
        return new EurekaServerMarkerConfiguration.Marker();
    }

    class Marker {
        Marker() {
        }
    }
}


     从代码中可以看出,整个类什么具体的事都没有做,只实例化了一个 Marker 类。

        回到 @EnableEurekaServer 注解前面的流程,有一个 @ConditionalOnBean 的注解,该注解就表示如果内存中有 Market.class 类,则加载 EurekaServerAutoConfiguration 类,这样整个流程就串起来了。

小结

       上面的代码简单的看了 SpringBoot 项目如何变成 Eureka Server 的开关,这里我整理了一个简单的流程图,希望可以对大家有所帮助。

图片

### Eureka 在 Spring Boot 中的服务发现与远程调用实现机制 #### 服务发现的实现机制 Eureka 是一种基于 REST API 的服务注册与发现工具,其核心功能在于维护一份动态更新的服务清单。当一个服务启动时,它会通过 `DiscoveryClient` 向 Eureka Server 注册自己的元数据(如 IP 地址、端口号等)[^4]。这些信息会被存储在 Eureka Server 的内存数据库中,并可供其他服务查询。 一旦服务成功注册到 Eureka Server 上之后,任何需要消费此服务的应用都可以利用 `DiscoveryClient` 查询目标服务的位置信息并建立连接。例如,在实际开发过程中,我们通常会在控制器层注入 `DiscoveryClient` 对象以便获取当前运行环境中所有可用实例的相关详情: ```java @RestController public class ComputeController { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired private DiscoveryClient discoveryClient; @GetMapping("/services") public List<String> services() { return this.discoveryClient.getServices(); } } ``` 以上代码展示了如何列举出已知的所有微服务名称列表[^5]。 #### 远程调用的具体实践方法 对于跨进程间通信而言,最常见的方式莫过于 RPC (Remote Procedure Call)。而借助 Ribbon 和 Feign 组件的支持下,Spring Cloud 能够极大地简化这类操作流程。 ##### 使用 RestTemplate 结合 LoadBalancer 实现负载均衡下的 HTTP 请求发送 首先确保项目引入了 spring-cloud-starter-netflix-ribbon 依赖项;其次修改原有单纯依靠 URL 构建 HttpEntity 的做法,转而创建带有 @LoadBalanced 注解的新 Bean 定义如下所示: ```java @Configuration public class RibbonConfig { @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); } } ``` 接着就可以像平常一样编写业务逻辑代码啦! ```java @Service public class HelloService { @Autowired private RestTemplate restTemplate; public String sayHiFromClientOne(String name){ return this.restTemplate.getForObject("http://SERVICE_NAME/hello?name="+name,String.class); } } ``` 注意这里的 "SERVICE_NAME" 应替换为你所要访问的实际服务标识符[^1]。 ##### 借助 OpenFeign 编写更加直观简洁风格化的接口定义形式 相比手动拼接参数字符串或者构造复杂的 Map 数据结构传参模式来说,OpenFeign 提供了一种更为优雅高效的解决方案——即只需按照标准 JAX-RS 规范书写相应的方法签名即可自动完成背后繁杂琐碎的工作环节。 先确认 pom 文件中有无缺失必要插件条目: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> ``` 随后开启全局开关属性配置文件 application.yml 加入以下内容行: ```yaml spring: cloud: openfeign: enabled: true ``` 最后便是正式登场的角色部分咯~ 创建独立 interface 类型声明远端资源路径映射关系描述语句块儿啦~ ```java @FeignClient(name="service-name", fallbackFactory=HelloRemote.HelloRemoteFallbackFactory.class) public interface HelloRemote{ @RequestMapping(method = RequestMethod.GET,value="/hello") String hello(@RequestParam(value="name")String name); //省略其余成员变量及内部类定义细节... } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农UP2U

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值