spring cloud 版本:Edgware.SR2 问题: 使用feign注册eurka服务在监听器中调用 package com.listener; import java.util.concurrent.Executors; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.xx.charge.facade.client.BusinessClient; import com.xx.framework.util.SnowflakeIdWorkerUtils; import com.xx.framework.util.StringUtils; import com.xx.getway.app.common.Global; import lombok.extern.slf4j.Slf4j; @Component @Slf4j public class LoadDataListener implements ServletContextListener { @Autowired private BusinessClient businessClient; @Override public void contextInitialized(ServletContextEvent sce) { businessClient.loadData(); } @Override public void contextDestroyed(ServletContextEvent sce) { } } ================================================================= @FeignClient(value = "app",fallback=AppStartClientFallback.class) public interface AppStartClient { @RequestMapping(value = "/app/loadData") ResponseInfo loadData(); } @Slf4j @Component class AppStartClientFallback implements AppStartClient{ @Override public ResponseInfo loadData() { log.error("数据进入服务消费者降级处理"); return ResponseInfo.error("数据进入服务消费者降级处理"); } } ===================================================== @EnableDiscoveryClient @SpringBootApplication(exclude = { MongoAutoConfiguration.class, MongoDataAutoConfiguration.class }, scanBasePackages = { "com.xx.bsp.getway.app","com.xx.bsp.charge.facade.client" }) @EnableFeignClients // 启用feign @ImportResource(locations = { "classpath:/applicationContext.xml" }) @ServletComponentScan(basePackageClasses = { LoadDataListener.class }) public class Application { } ================================================== 问题:项目启动 始终是会进入熔断,然后在调用目标方法。 原因:监听器在springcloud加载配置文件HystrixCommandProperties之前就调用目标方法, 监听器的方法调用默认为1秒 超过这个时间自定会进入熔断fallback方法。 真正的Hystrix还未起作用 这个时候还是会调用目标方法。 解决办法:不用servlet监听。 需要在容器启动的时候执行一些内容。比如读取配置文件,数据库连接之类的。 SpringBoot给我们提供了两个接口来帮助我们实现这种需求。 这两个接口分别为CommandLineRunner和ApplicationRunner。 他们的执行时机为容器启动完成的时候。 @Component @Slf4j public class InitDataApplicationRunner implements ApplicationRunner {
@Autowired private AppStartClient appStartClient;
@Override public void run(ApplicationArguments args) throws Exception { long startTime = System.currentTimeMillis();// 开始时间 log.info("getway redis开始初始化!"); ResponseInfo response=appStartClient.loadData(); long endTime = System.currentTimeMillis();// 结束时间 float excTime = (float) (endTime - startTime) / 1000; if(response.isSuccess()){ log.info("getway redis初始化完成!,执行时间: {}s", excTime); }else{ log.error("getway redis初始化失败!,执行时间: {}s", excTime,response.getMessage()); } } package com.jb.mpc.equipmemnt.config;
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component;
import com.jb.mpc.controller.EquipmentController;
/** * @see @Order注解的执行优先级是按value值从小到大顺序。 * @author pangps * @version v1.0 * @date 2017年7月24日 * */ @Component @Order(value=1) public class MyApplicationRunner implements ApplicationRunner{ private static final Logger logger = LoggerFactory.getLogger(MyApplicationRunner.class); @Override public void run(ApplicationArguments args) throws Exception { logger.info("==服务启动后,初始化数据操作=="); } } package com.jb.mpc.equipmemnt.config;
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.CommandLineRunner; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component;
/** * @see @Order注解的执行优先级是按value值从小到大顺序。 * @author pangps * @version v1.0 * @date 2017年7月24日 * */ @Component @Order(value=2) public class MyCommandLineRunner implements CommandLineRunner{ private static final Logger logger = LoggerFactory.getLogger(MyCommandLineRunner.class);
@Override public void run(String... args) throws Exception { logger.info("==服务启动执行,执行加载数据等操作=="); } }
说明:
1、@Order注解
如果有多个实现类,而你需要他们按一定顺序执行的话,可以在实现类上加上@Order注解。@Order(value=整数值)。SpringBoot会按照@Order中的value值从小到大依次执行。
2、如果你发现你的实现类没有按照你的需求执行,请看一下实现类上是否添加了Spring管理的注解(@Component)。
相关推荐
其中,Eureka是服务注册与发现中心,Ribbon和Feign是服务调用组件,Hystrix用于实现熔断模式,而Zuul则是微服务网关。Spring Cloud Alibaba是阿里巴巴开源的Spring Cloud模块,提供了在Spring Cloud中使用阿里巴巴...
SpringCloud是基于Spring Boot实现的一套微服务框架,它提供了众多功能,如服务注册与发现、负载均衡、熔断机制、API网关等,帮助企业构建分布式系统。在本"springCloud入门源码"中,我们可以深入理解这些核心组件的...
在Spring Cloud实战项目中,我们将学习如何设计和构建微服务,包括服务拆分原则、服务间通信(Restful API、Feign、Ribbon等)、服务调用的负载均衡、熔断机制(Hystrix)和服务网格(如Istio)的应用。 六、分布式...
了解如何配置Eureka客户端,以及如何处理服务的健康检查和心跳机制,是使用SpringCloud的第一步。 2. **Zuul边缘服务与API网关**: Zuul是SpringCloud中的API网关,负责路由转发、过滤器处理以及服务的聚合。学习...
1. **服务发现**:Spring Cloud Netflix Eureka 提供了服务注册与发现的功能,使得服务之间可以互相发现并调用。 2. **负载均衡**:Ribbon 是客户端负载均衡器,它结合Eureka实现了服务的自动负载均衡。 3. **断路器...
这两个项目可能包含了Spring Cloud的多个组件和服务,例如Eureka(服务注册与发现)、Zuul(API网关)、Hystrix(断路器)、Feign(声明式客户端)等。 1. **服务注册与发现(Eureka)**:Eureka是Spring Cloud中的...
在IT行业中,Spring Cloud是一个广泛使用的微服务框架,它提供了构建分布式系统所需的工具和服务,如服务发现、配置中心、负载均衡、熔断机制等。在这个名为"SpringCloud消费者服务提供者"的项目中,我们看到涉及到...
Spring Cloud 是一个基于 Spring Boot 实现的云应用开发工具,它为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)...
3. 使用服务:在服务消费者的业务代码中,可以通过@LoadBalanced注解的RestTemplate或Spring Cloud提供的Feign Client来实现对服务的调用。它们会根据Eureka Server获取的服务列表,自动进行负载均衡。 总结来说,...
在微服务之间进行远程调用时,可以使用Spring Cloud的RestTemplate或者Feign Client,通过服务名动态获取服务实例地址,实现服务之间的通信。这种方式称为服务到服务的通信,避免了硬编码IP和端口,增强了系统的可...
SpringCloud是微服务架构中的重要组件,它包含了一系列子项目,如服务发现、负载均衡、熔断机制等。本文将围绕SpringCloud的选择题,详细解释其中涉及的关键知识点。 1. Spring Boot添加开发者工具集通常使用`...
在现代的分布式系统中,服务发现、服务调用和熔断机制是不可或缺的组件,Spring Boot结合Consul、Feign和HystrixCommand可以有效地解决这些问题。本文将深入探讨这三个技术如何协同工作,构建出一个健壮的微服务架构...
8. **服务治理**:Spring Cloud Netflix提供了全面的服务治理方案,包括服务注册、发现、配置、熔断、负载均衡等,而随着Netflix OSS组件逐渐进入维护模式,Spring Cloud OpenFeign和Spring Cloud LoadBalancer等新...
SpringCloud提供了分布式锁的解决方案,如RedisLock或ZookeeperLock,以及分布式事务的处理,如Seata(原名AT模式)来解决跨服务的事务一致性问题。 **8. 监控与日志** SpringCloud还集成了Spring Boot Actuator,...
学习这个教程,你将了解如何使用Spring Cloud搭建微服务架构,包括服务注册与发现(Eureka)、服务调用(Feign)、服务降级和熔断(Hystrix)以及服务间的通信。同时,你还将接触到Maven项目管理、IntelliJ IDEA的...
Zuul是SpringCloud中的边缘服务组件,它作为系统的入口,负责路由转发、过滤器处理以及权限验证等功能。API网关可以集中处理跨所有服务的公共操作,如认证、限流、日志记录等,简化了微服务架构的复杂性。 3. **...
3. **Spring Cloud组件**:详述Eureka的注册与发现,Ribbon和Zuul的负载均衡,Hystrix的熔断降级,以及Feign的声明式服务调用。 4. **Vue.js基础**:掌握Vue实例、指令、组件、计算属性和监听器等核心概念。 5. **...
以上各组件的源码分析,不仅能帮助我们理解Spring Cloud的工作原理,也能提升我们在微服务架构设计和问题排查中的能力。在实际操作中,结合Spring Cloud的官方文档和GitHub上的源码,通过阅读、调试和实践,我们将...
Config Client则会在启动时从Config Server拉取配置,并在运行期间监听配置变化,实时更新服务的配置。这种配置方式提高了配置的可管理性和灵活性,减少了因为配置错误导致的问题。 总结来说,"parent2.zip"中的...
以下是对标题和描述中提到的几个关键组件——Ribbon、Feign、Dubbo、Sentinel的源码分析,以及与它们相关的Spring Boot启动过程、配置文件加载流程、Nacos源码分析、Web MVC配置、DataBinder和Servlet与Filter的加载...