spring-cloud / spring-cloud-openfeign

Support for using OpenFeign in Spring Cloud apps
Apache License 2.0
1.17k stars 756 forks source link

[sentinel] openfeign+sentinel Error #1017

Closed Romic77 closed 3 months ago

Romic77 commented 3 months ago

Issue Description org.springframework.beans.factory.BeanCreationNotAllowedException: Error creating bean with name 'meterRegistryCloser': Singleton bean creation not allowed while singletons of this factory are in destruction (Do not request a bean from a BeanFactory in a destroy method implementation!) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:220) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204) at org.springframework.context.event.AbstractApplicationEventMulticaster.retrieveApplicationListeners(AbstractApplicationEventMulticaster.java:265) at org.springframework.context.event.AbstractApplicationEventMulticaster.getApplicationListeners(AbstractApplicationEventMulticaster.java:222) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:144) at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:445) at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:451) at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:378) at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1069) at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:1037) at org.springframework.cloud.context.named.NamedContextFactory.destroy(NamedContextFactory.java:113) at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:211) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:587) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:559) at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingleton(DefaultListableBeanFactory.java:1200) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:520) at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingletons(DefaultListableBeanFactory.java:1193) at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1125) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:628) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1342) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1331) at org.example.CloudOrderApplication.main(CloudOrderApplication.java:28)

2024-04-06 14:21:49.028 INFO 7824 --- [TID: N/A] [cloud-order] main o.apache.catalina.core.StandardService Line:173 : Stopping service [Tomcat] 2024-04-06 14:21:49.055 INFO 7824 --- [TID: N/A] [cloud-order] main .s.b.a.l.ConditionEvaluationReportLogger Line:82 :

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 2024-04-06 14:21:49.068 ERROR 7824 --- [TID: N/A] [cloud-order] main o.s.boot.SpringApplication Line:839 : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'lbController': Injection of resource dependencies failed at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:323) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1420) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:523) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:973) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:946) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:616) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1342) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1331) at org.example.CloudOrderApplication.main(CloudOrderApplication.java:28) Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.example.pay.api.RemoteConfigService': FactoryBean threw exception on object creation at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:188) at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:124) at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1810) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getObjectForBeanInstance(AbstractAutowireCapableBeanFactory.java:1277) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1441) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1348) at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:530) at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:508) at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:659) at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:270) at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:145) at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:320) ... 17 common frames omitted Caused by: java.lang.IllegalStateException: Method RemoteConfigService#getLb() not annotated with HTTP method type (ex. GET, POST) Warnings:

Class RemoteConfigService has annotations [FeignClient] that are not used by contract Default Method getLb has an annotation GetMapping that is not used by contract Default at feign.Util.checkState(Util.java:140) at feign.Contract$BaseContract.parseAndValidateMetadata(Contract.java:115) at feign.Contract$BaseContract.parseAndValidateMetadata(Contract.java:65) at feign.DeclarativeContract.parseAndValidateMetadata(DeclarativeContract.java:38) at feign.ReflectiveFeign$ParseHandlersByName.apply(ReflectiveFeign.java:137) at feign.ReflectiveFeign.newInstance(ReflectiveFeign.java:56) at feign.ReflectiveFeign.newInstance(ReflectiveFeign.java:48) at feign.Feign$Builder.target(Feign.java:201) at org.springframework.cloud.openfeign.DefaultTargeter.target(DefaultTargeter.java:30) at org.springframework.cloud.openfeign.FeignClientFactoryBean.loadBalance(FeignClientFactoryBean.java:399) at org.springframework.cloud.openfeign.FeignClientFactoryBean.getTarget(FeignClientFactoryBean.java:447) at org.springframework.cloud.openfeign.FeignClientFactoryBean.getObject(FeignClientFactoryBean.java:422) at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:182) ... 31 common frames omitted Disconnected from the target VM, address: '127.0.0.1:10776', transport: 'socket'

Process finished with exit code 1

Type: bug report

Describe what happened

3.2.0 2023.0.0 2022.0.0.0 bootstrap.yml ``` #springboot和spingcloud版本太高,导致启动报错 feign: sentinel: enabled: true ``` Application startup error,when i write ` feigin.sentinel.enable=true`。
Romic77 commented 3 months ago

i want use sentinel FallbackFactory。

@Slf4j
@Component
public class RemotePayServiceFallbackFactory implements FallbackFactory<RemotePayService> {
    @Override
    public RemotePayService create(Throwable cause) {
        log.error("pay服务调用失败:{},fallback服务降级", cause.getMessage());
        return new RemotePayService() {
            @Override
            public Result<Void> save(PayDTO payDTO) {
                return null;
            }

            @Override
            public Result<PayDTO> getPayDetailById(Long id) {
                return null;
            }

            @Override
            public Result<String> bulkheadById(Integer id) {
                return null;
            }
        };
    }
}
Romic77 commented 3 months ago
2023.0.0.0-RC1