Giter VIP home page Giter VIP logo

nepxion / discovery Goto Github PK

View Code? Open in Web Editor NEW
5.5K 239.0 1.4K 222.47 MB

☀️ Nepxion Discovery is a solution for Spring Cloud with blue green, gray, route, limitation, circuit breaker, degrade, isolation, tracing, dye, failover, active 蓝绿灰度发布、路由、限流、熔断、降级、隔离、追踪、流量染色、故障转移、多活

Home Page: http://www.nepxion.com

License: Apache License 2.0

Java 99.74% Batchfile 0.26%
spring-cloud gray-release nacos apollo sentinel skywalking opentelemetry blue-green-deployment cloud-native etcd

discovery's People

Contributors

ankeway avatar ax1an avatar haojunren avatar ifrozenice avatar robingg avatar rottenmu avatar tank-zhu avatar xucw avatar zhangningpegasus avatar zifeihan avatar zsjzero avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

discovery's Issues

关于灰度发布推送规则namespace的问题

我们的环境是存在不同命名空间的,但是我发现如下配置并不能将Discovery生成的配置推送到对应的namespace中,请问应该如何配置?谢谢。

# Nacos config for rule
nacos.server-addr=http://localhost:8080
nacos.namespace=04f338ed-da29-4901-bd2d-ddc2dd90

为何不基于eureka做灰度呢?

为何不基于eureka(注册中心)做灰度呢?
这样每个服务都要去做配置,必须要搞清楚每个服务对应的消费者与生产
如果服务多,消费者也可能是生产者,这就感觉很麻烦了。
如果是在eureka(注册中心)做的话,注册中心肯定知道谁是谁,
谁得版本是多少,只有关注消费者即可,你要消费的在我的规则内就给你消费,不是就不允许你消费,不是挺好的

示例演示中版本权重访问规则改变存在问题

要想达到文中所述

操作的逻辑:B服务1.0的版本向A服务提供10%流量,B服务1.1的版本向A服务提供90%流量

按照我的理解, 新的版本权重规则应该如下:

<?xml version="1.0" encoding="UTF-8"?>
<rule>
    <discovery>
        <weight>
            <service consumer-service-name="discovery-springcloud-example-a" provider-service-name="discovery-springcloud-example-b" provider-weight-value="1.0=10;1.1=90"/>
        </weight>
    </discovery>
</rule>

而且, post的请求地址应该是 http://localhost:1100/config/update-synchttp://localhost:1101/config/update-sync
其中, consumer应该是a, provider应该是b, 不知道我理解的是否对?

ServerWebExchange对象在线程切换时丢失

环境:SpringCloud :Finchley
Discovery:4.13.5 版本匹配
pom依赖检查无错误
启动项目

  • gateway
  • eureka
  • apollo
  • service-a_1.0,service-a_1.1(显示名)
  • auth

问题:
在集成测试sevice-a 时使用Header 参数 指定了 n-d-version: {"service-a":"1.1"}
对应eurekametadata也指定了对应version 和group
实际结果版本指定规则未生效

于是乎一路Debug

@Override
    public String getHeader(String name) {
       // 检查到此处发现从线程中获取ServerWebExchange 为null,排查无果
        ServerWebExchange exchange = getExchange();
        if (exchange == null) {
            LOG.warn("The ServerWebExchange object is lost for thread switched, or it is got before context filter probably");

            return null;
        }
        return exchange.getRequest().getHeaders().getFirst(name);
    }

如上所示,导致Header 中n-d-version 参数获取不到,作者大大这是为啥呀

This is very likely to create a memory leak sun.misc.Unsafe.park(Native Method)

  1. springcloud版本: Greenwich.RELEASE
  2. discovery-plugin 5.1.0
        <dependency>
            <groupId>com.nepxion</groupId>
            <artifactId>discovery-plugin-starter-nacos</artifactId>
            <version>${discovery.version}</version>
        </dependency>

        <dependency>
            <groupId>com.nepxion</groupId>
            <artifactId>discovery-plugin-config-center-starter-nacos</artifactId>
            <version>${discovery.version}</version>
        </dependency>
  1. 配置:
spring:
  application:
    name: xxxx
  cloud:
    nacos:
      config:
        server-addr: hoXXXXXrver:8848
        file-extension: yaml
        namespace: 38676d55XXXXXXXXX81-fe2e150b7606
      discovery:
        namespace: 38676d55XXXXXXXXXXXXXXX606

报错:

2019-06-10 14:33:32.134 ERROR [user-service,,,] 14188 --- [           main] o.s.b.web.embedded.tomcat.TomcatStarter  : Error starting Tomcat context. Exception: org.springframework.beans.factory.BeanCreationException. Message: Error creating bean with name 'servletEndpointRegistrar' defined in class path resource [org/springframework/boot/actuate/autoconfigure/endpoint/web/ServletEndpointManagementContextConfiguration$WebMvcServletEndpointManagementContextConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.actuate.endpoint.web.ServletEndpointRegistrar]: Factory method 'servletEndpointRegistrar' threw exception; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'serviceRegistryEndpoint' defined in class path resource [org/springframework/cloud/client/serviceregistry/ServiceRegistryAutoConfiguration$ServiceRegistryEndpointConfiguration.class]: Unsatisfied dependency expressed through method 'serviceRegistryEndpoint' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'nacosServiceRegistry' defined in class path resource [org/springframework/cloud/alibaba/nacos/NacosDiscoveryAutoConfiguration.class]: Initialization of bean failed; nested exception is java.lang.NoSuchMethodError: org.springframework.cloud.alibaba.nacos.registry.NacosServiceRegistry.<init>(Lorg/springframework/cloud/alibaba/nacos/NacosDiscoveryProperties;)V
2019-06-10 14:33:32.164  INFO [user-service,,,] 14188 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2019-06-10 14:33:32.168  WARN [user-service,,,] 14188 --- [           main] o.a.c.loader.WebappClassLoaderBase       : The web application [ROOT] appears to have started a thread named [AsyncReporter{org.springframework.cloud.sleuth.zipkin2.sender.RestTemplateSender@65fc8edc}] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 sun.misc.Unsafe.park(Native Method)
 java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
 java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
 zipkin2.reporter.ByteBoundedQueue.drainTo(ByteBoundedQueue.java:81)
 zipkin2.reporter.AsyncReporter$BoundedAsyncReporter.flush(AsyncReporter.java:257)
 zipkin2.reporter.AsyncReporter$Builder$1.run(AsyncReporter.java:190)
2019-06-10 14:33:32.169  WARN [user-service,,,] 14188 --- [           main] o.a.c.loader.WebappClassLoaderBase       : The web application [ROOT] appears to have started a thread named [spring.cloud.inetutils] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 sun.misc.Unsafe.park(Native Method)
 java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
 java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
 java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
 java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
 java.lang.Thread.run(Thread.java:748)
2019-06-10 14:33:32.170  WARN [user-service,,,] 14188 --- [           main] o.a.c.loader.WebappClassLoaderBase       : The web application [ROOT] appears to have started a thread named [lettuce-eventExecutorLoop-1-1] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 sun.misc.Unsafe.park(Native Method)
 java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
 java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
 java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:467)
 io.netty.util.concurrent.SingleThreadEventExecutor.takeTask(SingleThreadEventExecutor.java:251)
 io.netty.util.concurrent.DefaultEventExecutor.run(DefaultEventExecutor.java:64)
 io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:897)
 io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
 java.lang.Thread.run(Thread.java:748)
2019-06-10 14:33:32.172  WARN [user-service,,,] 14188 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
2019-06-10 14:33:33.189  WARN [user-service,,,] 14188 --- [           main] z.r.AsyncReporter$BoundedAsyncReporter   : Timed out waiting for in-flight spans to send
2019-06-10 14:33:33.190  INFO [user-service,,,] 14188 --- [           main] c.n.eventbus.thread.ThreadPoolFactory    : Shutting down thread pool executor [java.util.concurrent.ThreadPoolExecutor@6de5ad56[Running, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0]]...
2019-06-10 14:33:33.204  INFO [user-service,,,] 14188 --- [           main] ConditionEvaluationReportLoggingListener : 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2019-06-10 14:33:33.215 ERROR [user-service,,,] 14188 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

An attempt was made to call the method org.springframework.cloud.alibaba.nacos.registry.NacosServiceRegistry.<init>(Lorg/springframework/cloud/alibaba/nacos/NacosDiscoveryProperties;)V but it does not exist. Its class, org.springframework.cloud.alibaba.nacos.registry.NacosServiceRegistry, is available from the following locations:

    jar:file:/E:/mvn_repo/org/springframework/cloud/spring-cloud-alibaba-nacos-discovery/0.2.1.RELEASE/spring-cloud-alibaba-nacos-discovery-0.2.1.RELEASE.jar!/org/springframework/cloud/alibaba/nacos/registry/NacosServiceRegistry.class

It was loaded from the following location:

    file:/E:/mvn_repo/org/springframework/cloud/spring-cloud-alibaba-nacos-discovery/0.2.1.RELEASE/spring-cloud-alibaba-nacos-discovery-0.2.1.RELEASE.jar


Action:

Correct the classpath of your application so that it contains a single, compatible version of org.springframework.cloud.alibaba.nacos.registry.NacosServiceRegistry


4.1.2版本的discovery-plugin-starter-eureka引入后启动报错

如果只引入discovery-plugin-starter-eureka,启动会报错,读不到${swagger.service.description}这个值,我猜测应该是依赖的某个swagger没有引入,我参考的是discovery-springcloud-example下的配置,本来是想在zuul引入的。

Hystrix获取Request BUG

public ServletRequestAttributes getRestAttributes() {
    Boolean hystrixThreadlocalSupported = environment.getProperty(StrategyConstant.SPRING_APPLICATION_STRATEGY_HYSTRIX_THREADLOCAL_SUPPORTED, Boolean.class, Boolean.FALSE);
    if (hystrixThreadlocalSupported) {
        return (ServletRequestAttributes) RestStrategyContext.getCurrentContext().getRequestAttributes();
    } else {
        return (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
    }
}

这段代码在获取Request对象的时候,对Hystrix做了兼容,但是这个地方还是有一些问题。

因为项目里的请求不是并不全是非黑即白的,如果开启spring.application.strategy.hystrix.threadlocal.supported,那么就认为所有的请求都是基于Hystrix发送的,而实际上项目的部分请求是基于Hystrix的,部分是正常发送的,所以开启此开关以后,获取Request不能兼容这种情况。导致出现NullpointException

拉人气拉人气

花了两个小时大概看了一下,军哥写的东西又轻量扩展性又好,给了我一些启发,sc社区就需要这种优秀的作品😊

多级服务调用的路由执行灰度路由执行报错

测试系统调用如下:zuul -> channel-server -> order-server
在zuul上执行灰度路由,将channel-server和order-server一同选中,执行则会报错。
zuul服务报如下错误:
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of java.util.LinkedHashMap: no String-argument constructor/factory method to deserialize from String value ('') at [Source: [{"serviceId":"order-server","version":"1.0","region":"","host":"10.10.2.19","port":8603,"weight":-1,"customMap":"","contextPath":"/","nexts":[]}]; line: 1, column: 114] (through reference chain: java.util.ArrayList[0]->com.nepxion.discovery.common.entity.RouterEntity["customMap"]) at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:270) ~[jackson-databind-2.8.11.2.jar:2.8.11.2] at com.fasterxml.jackson.databind.DeserializationContext.instantiationException(DeserializationContext.java:1469) ~[jackson-databind-2.8.11.2.jar:2.8.11.2] at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1012) ~[jackson-databind-2.8.11.2.jar:2.8.11.2] at com.fasterxml.jackson.databind.deser.ValueInstantiator._createFromStringFallbacks(ValueInstantiator.java:371) ~[jackson-databind-2.8.11.2.jar:2.8.11.2] at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.createFromString(StdValueInstantiator.java:324) ~[jackson-databind-2.8.11.2.jar:2.8.11.2] at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:355) ~[jackson-databind-2.8.11.2.jar:2.8.11.2] at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:27) ~[jackson-databind-2.8.11.2.jar:2.8.11.2] at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:504) ~[jackson-databind-2.8.11.2.jar:2.8.11.2] at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:104) ~[jackson-databind-2.8.11.2.jar:2.8.11.2] at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:276) ~[jackson-databind-2.8.11.2.jar:2.8.11.2] at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:140) ~[jackson-databind-2.8.11.2.jar:2.8.11.2] at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:287) ~[jackson-databind-2.8.11.2.jar:2.8.11.2] at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:259) ~[jackson-databind-2.8.11.2.jar:2.8.11.2] at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:26) ~[jackson-databind-2.8.11.2.jar:2.8.11.2] at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3814) ~[jackson-databind-2.8.11.2.jar:2.8.11.2] at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2877) ~[jackson-databind-2.8.11.2.jar:2.8.11.2] at com.nepxion.discovery.common.util.JsonUtil.fromJson(JsonUtil.java:58) ~[discovery-common-3.7.6.jar:?]
报错原因为/router/route/order-server/接口返回json中customMap字段为"",而对应的解析类RouterEntity为Map类型,无法反序列化。
全链路规则为:
<?xml version="1.0" encoding="UTF-8"?> <rule> <discovery> <version> <service consumer-service-name="channel-server" provider-service-name="account-server" consumer-version-value="1.0" provider-version-value="1.0"/> <service consumer-service-name="channel-server" provider-service-name="order-server" consumer-version-value="1.0" provider-version-value="1.0"/> <service consumer-service-name="api-gateway" provider-service-name="channel-server" consumer-version-value="1.0" provider-version-value="1.0"/> </version> </discovery> </rule>
希望作者大大帮忙看下,谢谢

考虑将开发中的代码更新为 SNAPSHOT 版本

环境

  • discovery.version: 5.5.2

问题描述

今天在尝试通过 discovery-springcloud-example-gateway 示例搭建一个 Demo 服务。然后发现在 String environment = pluginAdapter.getServerEnvironment(server); 报错。查看接口类,发现没有这个接口,但是 example 里面确实存在这个接口。版本号也符合,都是 5.5.2。进一步查看后发现是昨天新提交的代码(咋就这么巧),但是版本号并没有更新为 5.5.3-SNAPSHOT,就导致了代码不一致的情况出现

期望

在一个版本正式发布以后,后续的新功能开发版本号应该更新,比如 5.5.2-RELEASE --> 5.5.3-SNAPSHOT

谁在使用Nepxion

首先诚挚的感谢每一位持续关注并使用Nepxion的同学。我们期待您能提供

  1. 您所在的公司、学校或组织
  2. 您所在的城市、国家
  3. 您的联系方式,邮箱或者微信
  4. 您将Nepxion用于哪些业务场景,使用哪种服务发现中间件,使用哪种配置中心中间件,使用哪些灰度发布或者路由功能。如果您对本开源比较感兴趣,但还没用上,可以填写为调研中
  5. 您所在公司、组织的Logo(希望您能提供Logo,我们会在官网展现这个Logo)

GatewayStrategyContext数据污染问题

1.我在用GatewayStrategyContext存储变量的时候,在初始filter设置了值,在拿到response后即使清空了threadlocal中的值,下次请求还会拿到上一次的结果。
2.由于gateway采用的是reactor框架,很多请求线程是一个,是否会造成数据污染

按照readme步骤测试,报错.

服务注册过滤的操作演示

黑/白名单的IP地址注册的过滤

  • 在rule.xml把本地IP地址写入到相应地方
  • 启动DiscoveryApplicationA1.java
  • 抛出禁止注册的异常,即本地服务受限于黑名单的IP地址列表,不会注册到服务注册发现中心;白名单操作也是如此,不过逻辑刚好相反.
    演示启动DiscoveryApplicationA1.java,报以下异常

APPLICATION FAILED TO START


Description:

Parameter 0 of method hystrixGatewayFilterFactory in org.springframework.cloud.gateway.config.GatewayAutoConfiguration$HystrixConfiguration required a bean of type 'org.springframework.web.reactive.DispatcherHandler' that could not be found.

Action:

Consider defining a bean of type 'org.springframework.web.reactive.DispatcherHandler' in your configuration.
注册中心用的eureka,启动是成功的.

关于负载均衡增加优先访问group的设想

有一个需求:服务数量比较多,在开发调试阶段不想本机启动太多服务,希望改了一个模块就启动这个模块,测试环境的group为test-group,开发环境为dev-group,test-group的服务只能访问test-group中的服务,这种只需要设置spring.application.strategy.consumer.isolation.enabled=true;但是dev-group的服务希望优先访问dev-group的服务,当dev-group没有该服务的时候访问test-group的服务,相当于一个优先级的概念
不过这也可以通过自定义扩展AbstractLoadBalanceListener实现,感觉不是很优雅,可以考虑支持一下~

DiscoveryClientDecorator can not be Autowired

version 5.5.10

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.nepxion.discovery.plugin.framework.decorator.DiscoveryClientDecorator' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

加入组件后微服务集群调用直接熔断,提示Error creating bean with name 'ribbonRule'


2019-08-26 17:17:06.685 [hystrix-horder-service-book-1] INFO   c.n.config.ChainedDynamicProperty-Flipping property: horder-service-book.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
2019-08-26 17:17:06.703 [hystrix-horder-service-book-1] WARN   o.s.c.a.AnnotationConfigApplicationContext-Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ribbonRule': Invocation of init method failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.nepxion.discovery.plugin.framework.context.PluginContextHolder' available
2019-08-26 17:17:06.764 [http-nio-6181-exec-2] DEBUG  c.j.h.s.impl.SearchoneServiceImpl-运价调用异常服务调用超时
2019-08-26 17:17:06.807 [http-nio-6181-exec-2] DEBUG  c.j.horder.aspect.WebLogAspect-订单平台接口返回报文:4CoWsTo1-->{"ResultCode":"80002","ErrorInfo":"服务调用超时"}

如已上错误, 我本来想采用作者组件中的ip注册隔离,不同环境切分.我的需求实现了,但是在通过feign服务间调用时出现以上问题.

pom.xml 中引用了

        <dependency>
            <groupId>com.nepxion</groupId>
            <artifactId>discovery-plugin-starter-eureka</artifactId>
        </dependency>

我将nepxion 单独打包成一个jar 所有的项目进行引用

规则文件

<?xml version="1.0" encoding="UTF-8"?>
<rule>
    <register>
        <blacklist filter-value="10.10;11.11">
        </blacklist>
    </register>
</rule>

apollo 配置中bootstrap.properties加入

#---------nepxion中间件需求------------------
spring.application.type=horder
spring.application.register.control.enabled=true
spring.application.config.format=xml
spring.application.config.path=classpath:rule.xml
#----------------------------------------------

swagger 在 2.x 版本 不支持 webflux

在 webflux 中 报错,因为 swagger 2.x 不支持 webflux
discovery-plugin-admin-center/src/main/java/com/nepxion/discovery/plugin/admincenter/configuration/SwaggerConfiguration.java

spring.cloud.consul.discovery.prefer-ip-address 配置失效

今天在基于Nepxion Discovery注册的时候,因为机器上有多网卡的关系,有几个是虚拟机的虚拟网卡,在注册consul的时候选用了虚拟网卡的ip。检查配置发现并没有配置

spring.cloud.consul.discovery.prefer-ip-address=true

ConsulApplicationContextInitializer.java类中,发现一行代码

ConsulDiscoveryProperties consulDiscoveryProperties = (ConsulDiscoveryProperties) bean;
consulDiscoveryProperties.setPreferIpAddress(true);

这里将配置写死了,建议大佬去除此配置,让用户可以自由配置spring.cloud.consul.discovery.prefer-ip-address 😄

抛出异常 No qualifying bean of type 'com.alibaba.cloud.nacos.NacosDiscoveryProperties' available

感觉像是这里的NacosDiscoveryProperties 没生成

image

简略的日志

2020-01-05T16:57:57.797Z [reactor-http-nio-2] WARN  o.s.c.a.AnnotationConfigApplicationContext Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: 

Error creating bean with name 'ribbonLoadBalancer' defined in com.nepxion.discovery.plugin.framework.configuration.PluginLoadBalanceConfiguration: Unsatisfied dependency expressed through method 'ribbonLoadBalancer' parameter 1;

nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: 
Error creating bean with name 'ribbonServerList' defined in com.nepxion.discovery.plugin.framework.configuration.NacosLoadBalanceConfiguration: Unsatisfied dependency expressed through method 'ribbonServerList' parameter 1; 

nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: 

No qualifying bean of type 'com.alibaba.cloud.nacos.NacosDiscoveryProperties' available: expected at least 1 bean which qualifies as autowire candidate. 
Dependency annotations: {}

一段详细错误日志:

Error creating bean with name 'ribbonLoadBalancer' defined in com.nepxion.discovery.plugin.framework.configuration.PluginLoadBalanceConfiguration: Unsatisfied dependency expressed through method 'ribbonLoadBalancer' parameter 1; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ribbonServerList' defined in com.nepxion.discovery.plugin.framework.configuration.NacosLoadBalanceConfiguration: Unsatisfied dependency expressedthrough method 'ribbonServerList' parameter 1; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.alibaba.cloud.nacos.NacosDiscoveryProperties' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}","trace":"org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ribbonLoadBalancer' defined in com.nepxion.discovery.plugin.framework.configuration.PluginLoadBalanceConfiguration: Unsatisfied dependency expressed through method 'ribbonLoadBalancer' parameter 1; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ribbonServerList' defined in com.nepxion.discovery.plugin.framework.configuration.NacosLoadBalanceConfiguration: Unsatisfied dependency expressed through method 'ribbonServerList' parameter 1; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.alibaba.cloud.nacos.NacosDiscoveryProperties' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:769)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:509)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1288)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1127)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:846)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:863)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546)
    at org.springframework.cloud.context.named.NamedContextFactory.createContext(NamedContextFactory.java:120)
    at org.springframework.cloud.context.named.NamedContextFactory.getContext(NamedContextFactory.java:88)
    at org.springframework.cloud.netflix.ribbon.SpringClientFactory.getContext(SpringClientFactory.java:118)
    at org.springframework.cloud.context.named.NamedContextFactory.getInstance(NamedContextFactory.java:129)
    at org.springframework.cloud.netflix.ribbon.SpringClientFactory.getInstance(SpringClientFactory.java:108)
    at org.springframework.cloud.netflix.ribbon.SpringClientFactory.getLoadBalancer(SpringClientFactory.java:57)
    at org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.getLoadBalancer(RibbonLoadBalancerClient.java:179)
    at org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.choose(RibbonLoadBalancerClient.java:83)
    at org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.choose(RibbonLoadBalancerClient.java:76)
    at org.springframework.cloud.gateway.filter.LoadBalancerClientFilter.choose(LoadBalancerClientFilter.java:103)
    at org.springframework.cloud.gateway.filter.LoadBalancerClientFilter.filter(LoadBalancerClientFilter.java:76)
    at org.springframework.cloud.gateway.handler.FilteringWebHandler$GatewayFilterAdapter.filter(FilteringWebHandler.java:135)
    at org.springframework.cloud.gateway.filter.OrderedGatewayFilter.filter(OrderedGatewayFilter.java:44)
    at org.springframework.cloud.gateway.handler.FilteringWebHandler$DefaultGatewayFilterChain.lambda$filter$0(FilteringWebHandler.java:117)
    at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:44)
    at reactor.core.publisher.MonoLift.subscribe(MonoLift.java:45)
    at reactor.core.publisher.MonoOnAssembly.subscribe(MonoOnAssembly.java:61)
    at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
    at reactor.core.publisher.MonoLift.subscribe(MonoLift.java:45)
    at reactor.core.publisher.MonoOnAssembly.subscribe(MonoOnAssembly.java:61)
    at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
    at reactor.core.publisher.MonoLift.subscribe(MonoLift.java:45)
    at reactor.core.publisher.MonoOnAssembly.subscribe(MonoOnAssembly.java:61)
    at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
    at reactor.core.publisher.MonoLift.subscribe(MonoLift.java:45)
    at reactor.core.publisher.MonoOnAssembly.subscribe(MonoOnAssembly.java:61)
    at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
    at reactor.core.publisher.MonoLift.subscribe(MonoLift.java:45)
    at reactor.core.publisher.MonoOnAssembly.subscribe(MonoOnAssembly.java:61)
    at reactor.core.publisher.Mono.subscribe(Mono.java:3695)
    atreactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.drain(MonoIgnoreThen.java:172)
    at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:56)
    at reactor.core.publisher.MonoLiftFuseable.subscribe(MonoLiftFuseable.java:55)
    at reactor.core.publisher.MonoOnAssembly.subscribe(MonoOnAssembly.java:61)
    at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
    at reactor.core.publisher.MonoLift.subscribe(MonoLift.java:45)
    atreactor.core.publisher.MonoOnAssembly.subscribe(MonoOnAssembly.java:56)
    at reactor.core.publisher.MonoPeekTerminal.subscribe(MonoPeekTerminal.java:61)
    at reactor.core.publisher.MonoLiftFuseable.subscribe(MonoLiftFuseable.java:55)
    at reactor.core.publisher.MonoOnAssembly.subscribe(MonoOnAssembly.java:61)
    at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
    at reactor.core.publisher.MonoLift.subscribe(MonoLift.java:45)
    at reactor.core.publisher.MonoOnAssembly.subscribe(MonoOnAssembly.java:61)
    at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
    at reactor.core.publisher.MonoLift.subscribe(MonoLift.java:45)
    at reactor.core.publisher.MonoOnAssembly.subscribe(MonoOnAssembly.java:61)
    at reactor.core.publisher.Mono.subscribe(Mono.java:3695)
    at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.drain(MonoIgnoreThen.java:172)
    at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:56)
    at reactor.core.publisher.MonoLiftFuseable.subscribe(MonoLiftFuseable.java:55)
    at reactor.core.publisher.MonoOnAssembly.subscribe(MonoOnAssembly.java:61)
    at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:150)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
    at io.opentracing.contrib.reactor.TracedSubscriber.lambda$onNext$2(TracedSubscriber.java:69)
    at io.opentracing.contrib.reactor.TracedSubscriber.withActiveSpan(TracedSubscriber.java:95)
    at io.opentracing.contrib.reactor.TracedSubscriber.onNext(TracedSubscriber.java:69)
    at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:67)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
    at io.opentracing.contrib.reactor.TracedSubscriber.lambda$onNext$2(TracedSubscriber.java:69)
    at io.opentracing.contrib.reactor.TracedSubscriber.withActiveSpan(TracedSubscriber.java:95)
    at io.opentracing.contrib.reactor.TracedSubscriber.onNext(TracedSubscriber.java:69)
    at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:76)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
    at io.opentracing.contrib.reactor.TracedSubscriber.lambda$onNext$2(TracedSubscriber.java:69)
    at io.opentracing.contrib.reactor.TracedSubscriber.withActiveSpan(TracedSubscriber.java:95)
    at io.opentracing.contrib.reactor.TracedSubscriber.onNext(TracedSubscriber.java:69)
    at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.innerNext(FluxConcatMap.java:275)
    at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onNext(FluxConcatMap.java:849)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
    at io.opentracing.contrib.reactor.TracedSubscriber.lambda$onNext$2(TracedSubscriber.java:69)
    at io.opentracing.contrib.reactor.TracedSubscriber.withActiveSpan(TracedSubscriber.java:95)
    at io.opentracing.contrib.reactor.TracedSubscriber.onNext(TracedSubscriber.java:69)
    at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:121)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
    at io.opentracing.contrib.reactor.TracedSubscriber.lambda$onNext$2(TracedSubscriber.java:69)
    at io.opentracing.contrib.reactor.TracedSubscriber.withActiveSpan(TracedSubscriber.java:95)
    at io.opentracing.contrib.reactor.TracedSubscriber.onNext(TracedSubscriber.java:69)
    at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:67)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
    at io.opentracing.contrib.reactor.TracedSubscriber.lambda$onNext$2(TracedSubscriber.java:69)
    at io.opentracing.contrib.reactor.TracedSubscriber.withActiveSpan(TracedSubscriber.java:95)
    at io.opentracing.contrib.reactor.TracedSubscriber.onNext(TracedSubscriber.java:69)
    at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1505)
    at reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:241)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
    at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2070)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.request(FluxOnAssembly.java:438)
    at reactor.core.publisher.MonoFlatMap$FlatMapInner.onSubscribe(MonoFlatMap.java:230)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onSubscribe(FluxOnAssembly.java:422)
    at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:54)
    at reactor.core.publisher.MonoLiftFuseable.subscribe(MonoLiftFuseable.java:55)
    at reactor.core.publisher.MonoOnAssembly.subscribe(MonoOnAssembly.java:61)
    at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:150)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
    at io.opentracing.contrib.reactor.TracedSubscriber.lambda$onNext$2(TracedSubscriber.java:69)
    at io.opentracing.contrib.reactor.TracedSubscriber.withActiveSpan(TracedSubscriber.java:95)
    at io.opentracing.contrib.reactor.TracedSubscriber.onNext(TracedSubscriber.java:69)
    at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:121)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
    at io.opentracing.contrib.reactor.TracedSubscriber.lambda$onNext$2(TracedSubscriber.java:69)
    at io.opentracing.contrib.reactor.TracedSubscriber.withActiveSpan(TracedSubscriber.java:95)
    at io.opentracing.contrib.reactor.TracedSubscriber.onNext(TracedSubscriber.java:69)
    at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:76)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
    at io.opentracing.contrib.reactor.TracedSubscriber.lambda$onNext$2(TracedSubscriber.java:69)
    at io.opentracing.contrib.reactor.TracedSubscriber.withActiveSpan(TracedSubscriber.java:95)
    at io.opentracing.contrib.reactor.TracedSubscriber.onNext(TracedSubscriber.java:69)
    at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.innerNext(FluxConcatMap.java:275)
    at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onNext(FluxConcatMap.java:849)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
    at io.opentracing.contrib.reactor.TracedSubscriber.lambda$onNext$2(TracedSubscriber.java:69)
    at io.opentracing.contrib.reactor.TracedSubscriber.withActiveSpan(TracedSubscriber.java:95)
    at io.opentracing.contrib.reactor.TracedSubscriber.onNext(TracedSubscriber.java:69)
    at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:73)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
    at io.opentracing.contrib.reactor.TracedSubscriber.lambda$onNext$2(TracedSubscriber.java:69)
    at io.opentracing.contrib.reactor.TracedSubscriber.withActiveSpan(TracedSubscriber.java:95)
    at io.opentracing.contrib.reactor.TracedSubscriber.onNext(TracedSubscriber.java:69)
    at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:204)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
    at io.opentracing.contrib.reactor.TracedSubscriber.lambda$onNext$2(TracedSubscriber.java:69)
    at io.opentracing.contrib.reactor.TracedSubscriber.withActiveSpan(TracedSubscriber.java:95)
    at io.opentracing.contrib.reactor.TracedSubscriber.onNext(TracedSubscriber.java:69)
    at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1505)
    atreactor.core.publisher.MonoFilterWhen$MonoFilterWhenMain.innerResult(MonoFilterWhen.java:193)
    at reactor.core.publisher.MonoFilterWhen$FilterWhenInner.onNext(MonoFilterWhen.java:260)
    at reactor.core.publisher.MonoFilterWhen$FilterWhenInner.onNext(MonoFilterWhen.java:228)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
    at io.opentracing.contrib.reactor.TracedSubscriber.lambda$onNext$2(TracedSubscriber.java:69)
    at io.opentracing.contrib.reactor.TracedSubscriber.withActiveSpan(TracedSubscriber.java:95)
    at io.opentracing.contrib.reactor.TracedSubscriber.onNext(TracedSubscriber.java:69)
    at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:121)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
    at io.opentracing.contrib.reactor.TracedSubscriber.lambda$onNext$2(TracedSubscriber.java:69)
    at io.opentracing.contrib.reactor.TracedSubscriber.withActiveSpan(TracedSubscriber.java:95)
    at io.opentracing.contrib.reactor.TracedSubscriber.onNext(TracedSubscriber.java:69)
    at reactor.core.publisher.FluxZip$ZipCoordinator.drain(FluxZip.java:735)
    at reactor.core.publisher.FluxZip$ZipInner.onSubscribe(FluxZip.java:867)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onSubscribe(FluxOnAssembly.java:422)
    at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:54)
    at reactor.core.publisher.MonoLiftFuseable.subscribe(MonoLiftFuseable.java:55)
    at reactor.core.publisher.MonoOnAssembly.subscribe(MonoOnAssembly.java:61)
    at reactor.core.publisher.Mono.subscribe(Mono.java:3695)
    at reactor.core.publisher.FluxZip$ZipCoordinator.subscribe(FluxZip.java:579)
    at reactor.core.publisher.FluxZip.handleBoth(FluxZip.java:326)
    at reactor.core.publisher.FluxZip.handleArrayMode(FluxZip.java:267)
    at reactor.core.publisher.FluxZip.subscribe(FluxZip.java:136)
    at reactor.core.publisher.FluxLift.subscribe(FluxLift.java:46)
    at reactor.core.publisher.FluxOnAssembly.subscribe(FluxOnAssembly.java:132)
    at reactor.core.publisher.FluxMapFuseable.subscribe(FluxMapFuseable.java:63)
    at reactor.core.publisher.FluxLiftFuseable.subscribe(FluxLiftFuseable.java:70)
    at reactor.core.publisher.FluxOnAssembly.subscribe(FluxOnAssembly.java:132)
    at reactor.core.publisher.Flux.subscribe(Flux.java:7743)
    at reactor.core.publisher.MonoFilterWhen$MonoFilterWhenMain.onNext(MonoFilterWhen.java:150)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
    at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2070)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.request(FluxOnAssembly.java:438)
    at reactor.core.publisher.MonoFilterWhen$MonoFilterWhenMain.onSubscribe(MonoFilterWhen.java:103)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onSubscribe(FluxOnAssembly.java:422)
    at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:54)
    at reactor.core.publisher.MonoLiftFuseable.subscribe(MonoLiftFuseable.java:55)
    at reactor.core.publisher.MonoOnAssembly.subscribe(MonoOnAssembly.java:61)
    at reactor.core.publisher.MonoFilterWhen.subscribe(MonoFilterWhen.java:56)
    at reactor.core.publisher.MonoLift.subscribe(MonoLift.java:45)
    at reactor.core.publisher.MonoOnAssembly.subscribe(MonoOnAssembly.java:61)
    at reactor.core.publisher.MonoPeekFuseable.subscribe(MonoPeekFuseable.java:74)
    at reactor.core.publisher.MonoLiftFuseable.subscribe(MonoLiftFuseable.java:55)
    at reactor.core.publisher.MonoOnAssembly.subscribe(MonoOnAssembly.java:61)
    at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44)
    at reactor.core.publisher.MonoLift.subscribe(MonoLift.java:45)
    at reactor.core.publisher.MonoOnAssembly.subscribe(MonoOnAssembly.java:61)
    at reactor.core.publisher.Mono.subscribe(Mono.java:3695)
    at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:442)
    at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.innerComplete(FluxConcatMap.java:289)
    at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onComplete(FluxConcatMap.java:873)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onComplete(FluxOnAssembly.java:363)
    at io.opentracing.contrib.reactor.TracedSubscriber.onComplete(TracedSubscriber.java:84)
    at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onComplete(Operators.java:1742)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onComplete(FluxOnAssembly.java:363)
    at io.opentracing.contrib.reactor.TracedSubscriber.onComplete(TracedSubscriber.java:84)
    at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onComplete(FluxPeekFuseable.java:271)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onComplete(FluxOnAssembly.java:363)
    at io.opentracing.contrib.reactor.TracedSubscriber.onComplete(TracedSubscriber.java:84)
    at reactor.core.publisher.Operators$MonoSubscriber.onComplete(Operators.java:1545)
    at reactor.core.publisher.MonoFilterWhen$MonoFilterWhenMain.innerResult(MonoFilterWhen.java:196)
    at reactor.core.publisher.MonoFilterWhen$FilterWhenInner.onNext(MonoFilterWhen.java:260)
    at reactor.core.publisher.MonoFilterWhen$FilterWhenInner.onNext(MonoFilterWhen.java:228)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
    at io.opentracing.contrib.reactor.TracedSubscriber.lambda$onNext$2(TracedSubscriber.java:69)
    at io.opentracing.contrib.reactor.TracedSubscriber.withActiveSpan(TracedSubscriber.java:95)
    at io.opentracing.contrib.reactor.TracedSubscriber.onNext(TracedSubscriber.java:69)
    at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:121)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
    at io.opentracing.contrib.reactor.TracedSubscriber.lambda$onNext$2(TracedSubscriber.java:69)
    at io.opentracing.contrib.reactor.TracedSubscriber.withActiveSpan(TracedSubscriber.java:95)
    at io.opentracing.contrib.reactor.TracedSubscriber.onNext(TracedSubscriber.java:69)
    at reactor.core.publisher.FluxZip$ZipCoordinator.drain(FluxZip.java:735)
    at reactor.core.publisher.FluxZip$ZipInner.onNext(FluxZip.java:894)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
    at io.opentracing.contrib.reactor.TracedSubscriber.lambda$onNext$2(TracedSubscriber.java:69)
    at io.opentracing.contrib.reactor.TracedSubscriber.withActiveSpan(TracedSubscriber.java:95)
    at io.opentracing.contrib.reactor.TracedSubscriber.onNext(TracedSubscriber.java:69)
    at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1505)
    at reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:241)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
    at io.opentracing.contrib.reactor.TracedSubscriber.lambda$onNext$2(TracedSubscriber.java:69)
    at io.opentracing.contrib.reactor.TracedSubscriber.withActiveSpan(TracedSubscriber.java:95)
    at io.opentracing.contrib.reactor.TracedSubscriber.onNext(TracedSubscriber.java:69)
    at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:121)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
    at io.opentracing.contrib.reactor.TracedSubscriber.lambda$onNext$2(TracedSubscriber.java:69)
    at io.opentracing.contrib.reactor.TracedSubscriber.withActiveSpan(TracedSubscriber.java:95)
    at io.opentracing.contrib.reactor.TracedSubscriber.onNext(TracedSubscriber.java:69)
    at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:204)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
    at io.opentracing.contrib.reactor.TracedSubscriber.lambda$onNext$2(TracedSubscriber.java:69)
    at io.opentracing.contrib.reactor.TracedSubscriber.withActiveSpan(TracedSubscriber.java:95)
    at io.opentracing.contrib.reactor.TracedSubscriber.onNext(TracedSubscriber.java:69)
    at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:73)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
    at io.opentracing.contrib.reactor.TracedSubscriber.lambda$onNext$2(TracedSubscriber.java:69)
    at io.opentracing.contrib.reactor.TracedSubscriber.withActiveSpan(TracedSubscriber.java:95)
    at io.opentracing.contrib.reactor.TracedSubscriber.onNext(TracedSubscriber.java:69)
    at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:121)
    at reactor.core.publisher.FluxContextStart$ContextStartSubscriber.onNext(FluxContextStart.java:103)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
    at io.opentracing.contrib.reactor.TracedSubscriber.lambda$onNext$2(TracedSubscriber.java:69)
    at io.opentracing.contrib.reactor.TracedSubscriber.withActiveSpan(TracedSubscriber.java:95)
    at io.opentracing.contrib.reactor.TracedSubscriber.onNext(TracedSubscriber.java:69)
    at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:121)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
    at io.opentracing.contrib.reactor.TracedSubscriber.lambda$onNext$2(TracedSubscriber.java:69)
    at io.opentracing.contrib.reactor.TracedSubscriber.withActiveSpan(TracedSubscriber.java:95)
    at io.opentracing.contrib.reactor.TracedSubscriber.onNext(TracedSubscriber.java:69)
    at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.onNext(FluxFilterFuseable.java:113)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
    at io.opentracing.contrib.reactor.TracedSubscriber.lambda$onNext$2(TracedSubscriber.java:69)
    at io.opentracing.contrib.reactor.TracedSubscriber.withActiveSpan(TracedSubscriber.java:95)
    at io.opentracing.contrib.reactor.TracedSubscriber.onNext(TracedSubscriber.java:69)
    at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1505)
    at reactor.core.publisher.MonoCollectList$MonoBufferAllSubscriber.onComplete(MonoCollectList.java:118)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onComplete(FluxOnAssembly.java:363)
    at io.opentracing.contrib.reactor.TracedSubscriber.onComplete(TracedSubscriber.java:84)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onComplete(FluxOnAssembly.java:363)
    at reactor.core.publisher.FluxJust$WeakScalarSubscription.request(FluxJust.java:101)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.request(FluxOnAssembly.java:438)
    at io.opentracing.contrib.reactor.TracedSubscriber.lambda$request$1(TracedSubscriber.java:64)
    at io.opentracing.contrib.reactor.TracedSubscriber.withActiveSpan(TracedSubscriber.java:95)
    at io.opentracing.contrib.reactor.TracedSubscriber.request(TracedSubscriber.java:64)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.request(FluxOnAssembly.java:438)
    at reactor.core.publisher.MonoCollectList$MonoBufferAllSubscriber.onSubscribe(MonoCollectList.java:90)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onSubscribe(FluxOnAssembly.java:422)
    at io.opentracing.contrib.reactor.TracedSubscriber.lambda$onSubscribe$0(TracedSubscriber.java:59)
    at io.opentracing.contrib.reactor.TracedSubscriber.withActiveSpan(TracedSubscriber.java:95)
    at io.opentracing.contrib.reactor.TracedSubscriber.onSubscribe(TracedSubscriber.java:59)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onSubscribe(FluxOnAssembly.java:422)
    at reactor.core.publisher.FluxJust.subscribe(FluxJust.java:70)
    at reactor.core.publisher.FluxLiftFuseable.subscribe(FluxLiftFuseable.java:70)
    at reactor.core.publisher.FluxOnAssembly.subscribe(FluxOnAssembly.java:132)
    at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:54)
    at reactor.core.publisher.FluxLift.subscribe(FluxLift.java:46)
    at reactor.core.publisher.FluxOnAssembly.subscribe(FluxOnAssembly.java:132)
    at reactor.core.publisher.MonoCollectList.subscribe(MonoCollectList.java:59)
    at reactor.core.publisher.MonoLiftFuseable.subscribe(MonoLiftFuseable.java:55)
    at reactor.core.publisher.MonoOnAssembly.subscribe(MonoOnAssembly.java:56)
    at reactor.core.publisher.MonoFilterFuseable.subscribe(MonoFilterFuseable.java:47)
    at reactor.core.publisher.MonoLiftFuseable.subscribe(MonoLiftFuseable.java:55)
    at reactor.core.publisher.MonoOnAssembly.subscribe(MonoOnAssembly.java:61)
    at reactor.core.publisher.MonoMapFuseable.subscribe(MonoMapFuseable.java:59)
    at reactor.core.publisher.MonoLiftFuseable.subscribe(MonoLiftFuseable.java:55)
    at reactor.core.publisher.MonoOnAssembly.subscribe(MonoOnAssembly.java:56)
    at reactor.core.publisher.MonoSubscriberContext.subscribe(MonoSubscriberContext.java:47)
    at reactor.core.publisher.MonoMapFuseable.subscribe(MonoMapFuseable.java:59)
    at reactor.core.publisher.MonoLiftFuseable.subscribe(MonoLiftFuseable.java:55)
    at reactor.core.publisher.MonoOnAssembly.subscribe(MonoOnAssembly.java:61)
    at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44)
    at reactor.core.publisher.MonoLift.subscribe(MonoLift.java:45)
    at reactor.core.publisher.MonoOnAssembly.subscribe(MonoOnAssembly.java:61)
    at reactor.core.publisher.MonoPeekFuseable.subscribe(MonoPeekFuseable.java:74)
    at reactor.core.publisher.MonoLiftFuseable.subscribe(MonoLiftFuseable.java:55)
    at reactor.core.publisher.MonoOnAssembly.subscribe(MonoOnAssembly.java:61)
    at reactor.core.publisher.MonoMapFuseable.subscribe(MonoMapFuseable.java:59)
    at reactor.core.publisher.MonoLiftFuseable.subscribe(MonoLiftFuseable.java:55)
    at reactor.core.publisher.MonoOnAssembly.subscribe(MonoOnAssembly.java:61)
    at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:150)
    at reactor.core.publisher.FluxContextStart$ContextStartSubscriber.onNext(FluxContextStart.java:103)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
    at io.opentracing.contrib.reactor.TracedSubscriber.lambda$onNext$2(TracedSubscriber.java:69)
    at io.opentracing.contrib.reactor.TracedSubscriber.withActiveSpan(TracedSubscriber.java:95)
    at io.opentracing.contrib.reactor.TracedSubscriber.onNext(TracedSubscriber.java:69)
    at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:121)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
    at io.opentracing.contrib.reactor.TracedSubscriber.lambda$onNext$2(TracedSubscriber.java:69)
    at io.opentracing.contrib.reactor.TracedSubscriber.withActiveSpan(TracedSubscriber.java:95)
    at io.opentracing.contrib.reactor.TracedSubscriber.onNext(TracedSubscriber.java:69)
    at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.onNext(FluxFilterFuseable.java:113)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:353)
    at io.opentracing.contrib.reactor.TracedSubscriber.lambda$onNext$2(TracedSubscriber.java:69)
    at io.opentracing.contrib.reactor.TracedSubscriber.withActiveSpan(TracedSubscriber.java:95)
    at io.opentracing.contrib.reactor.TracedSubscriber.onNext(TracedSubscriber.java:69)
    at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1505)
    at reactor.core.publisher.MonoCollectList$MonoBufferAllSubscriber.onComplete(MonoCollectList.java:118)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onComplete(FluxOnAssembly.java:363)
    at io.opentracing.contrib.reactor.TracedSubscriber.onComplete(TracedSubscriber.java:84)
    at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:136)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onComplete(FluxOnAssembly.java:363)
    at io.opentracing.contrib.reactor.TracedSubscriber.onComplete(TracedSubscriber.java:84)
    at reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:252)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onComplete(FluxOnAssembly.java:363)
    at io.opentracing.contrib.reactor.TracedSubscriber.onComplete(TracedSubscriber.java:84)
    at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:136)
    at reactor.netty.channel.FluxReceive.terminateReceiver(FluxReceive.java:372)
    at reactor.netty.channel.FluxReceive.drainReceiver(FluxReceive.java:196)
    at reactor.netty.channel.FluxReceive.onInboundComplete(FluxReceive.java:337)
    at reactor.netty.channel.ChannelOperations.onInboundComplete(ChannelOperations.java:334)
    at reactor.netty.http.server.HttpServerOperations.onInboundNext(HttpServerOperations.java:445)
    at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:141)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
    at reactor.netty.http.server.HttpTrafficHandler.channelRead(HttpTrafficHandler.java:189)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
    at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:438)
    at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:323)
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:297)
    at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:253)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1434)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:965)
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:648)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:583)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:500)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:462)
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:897)
    at java.lang.Thread.run(Thread.java:748)
    Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Assembly trace from producer [reactor.core.publisher.MonoLift] :
reactor.core.publisher.Mono.defer(Mono.java:198)
org.springframework.cloud.gateway.handler.FilteringWebHandler$DefaultGatewayFilterChain.filter(FilteringWebHandler.java:113)
Error has been observed by the following operator(s):
|_    Mono.defer ⇢ org.springframework.cloud.gateway.handler.FilteringWebHandler$DefaultGatewayFilterChain.filter(FilteringWebHandler.java:113)
|_    Mono.defer ⇢ org.springframework.cloud.gateway.handler.FilteringWebHandler$DefaultGatewayFilterChain.filter(FilteringWebHandler.java:113)
|_    Mono.defer ⇢ org.springframework.cloud.gateway.handler.FilteringWebHandler$DefaultGatewayFilterChain.filter(FilteringWebHandler.java:113)
|_    Mono.defer ⇢ org.springframework.cloud.gateway.handler.FilteringWebHandler$DefaultGatewayFilterChain.filter(FilteringWebHandler.java:113)
|_    Mono.defer ⇢org.springframework.cloud.gateway.handler.FilteringWebHandler$DefaultGatewayFilterChain.filter(FilteringWebHandler.java:113)
|_    Mono.then ⇢ org.springframework.cloud.gateway.filter.NettyWriteResponseFilter.filter(NettyWriteResponseFilter.java:62)
|_    Mono.defer ⇢ org.springframework.cloud.gateway.handler.FilteringWebHandler$DefaultGatewayFilterChain.filter(FilteringWebHandler.java:113)
|_    Mono.doOnSuccessOrError ⇢ org.springframework.cloud.gateway.filter.GatewayMetricsFilter.filter(GatewayMetricsFilter.java:58)
|_    Mono.defer ⇢ org.springframework.cloud.gateway.handler.FilteringWebHandler$DefaultGatewayFilterChain.filter(FilteringWebHandler.java:113)
|_    Mono.defer ⇢ org.springframework.cloud.gateway.handler.FilteringWebHandler$DefaultGatewayFilterChain.filter(FilteringWebHandler.java:113)
|_    Mono.then ⇢ org.springframework.web.reactive.result.SimpleHandlerAdapter.handle(SimpleHandlerAdapter.java:46)
|_    Mono.flatMap ⇢ org.springframework.web.reactive.DispatcherHandler.handle(DispatcherHandler.java:151)
|_    Mono.flatMap ⇢ org.springframework.web.reactive.DispatcherHandler.handle(DispatcherHandler.java:152)
|_    Mono.defer ⇢ org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
|_    Mono.doAfterSuccessOrError ⇢ org.springframework.boot.actuate.web.trace.reactive.HttpTraceWebFilter.filter(HttpTraceWebFilter.java:99)
|_    Mono.flatMap ⇢ org.springframework.boot.actuate.web.trace.reactive.HttpTraceWebFilter.filter(HttpTraceWebFilter.java:82)
|_    Mono.defer ⇢ org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
|_    Mono.defer ⇢ org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
|_    Mono.doOnSuccess ⇢ org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter.filter(MetricsWebFilter.java:84)
|_    Mono.doOnError ⇢ org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter.filter(MetricsWebFilter.java:84)
|_    Mono.compose ⇢ org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter.filter(MetricsWebFilter.java:76)
|_    Mono.defer ⇢ org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
|_    Mono.defer ⇢ org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ribbonServerList' defined in com.nepxion.discovery.plugin.framework.configuration.NacosLoadBalanceConfiguration: Unsatisfied dependency expressed through method 'ribbonServerList' parameter 1; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type'com.alibaba.cloud.nacos.NacosDiscoveryProperties' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:769)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:509)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1288)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1127)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:277)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1244)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1164)
    at org.springframework.beans.factory.su100
        by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.alibaba.cloud.nacos.NacosDiscoveryProperties' available:expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1651)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1210)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1164)
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:857)
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:760)
    ... 368 more

关于错误注册的实现方案

看了下面关于错误注册的方案,用黑白名单其实并不好。结合一下以前我们的做法,consul 本身有acl token这个特性,也就是说通过consul 可以实现费token赋予某个节点的读或者写的权限,来控制,比如 sit/service1 这是一个sit 的服务节点。那么sit 环境分配到了一个acl token 叫做 0x1782173 ,那么这个token 具有这个服务的读权限则可以发现这个服务。具有这个节点的写权限则可以注册这个服务。同理 通过consul的 acl token 可以控制 各环境,甚至是一个环境下每一个token 能发现哪些服务,能注册哪些服务都是可以控制的。

我这边,以前实现过一次,但是一些原因那个代码不能拿出来。在这里提供一个思路,希望有帮助,谢谢!

pluginAdapter 获取元数据中版本问题

版本

  • nepxion 5.1.2
  • nacos 1.0.1
  • springcloud F版

使用zuul 网关

实现AbstractDiscoveryEnabledStrategy

在实现AbstractDiscoveryEnabledStrategy 后使用 String version = pluginAdapter.getServerMetadata(server).get(DiscoveryConstant.VERSION);
获取版本号,好像一直获取的都是本地版本号,想知道是设计就是如此,还是一个bug,
还有一个问题String dynamicVersion = pluginAdapter.getDynamicVersion();是获取的zuul 网关的动态版本,还是服务的提供端的版本

网关限流

gateway和zuul的网关限流怎么实现捏?用Sentinel 原生实现会不会和gateway上的灰度有影响?

关于Jaeger无法记录dubbo链路的问题

当我通过网关调取RestFul接口,而接口内部采用Dubbo调取内部子服务时,Jaeger无法记录dubbo调取过程,目前想到的办法是采用埋点将调取结果展示在span中,求教是不是我的配置有问题?还是别的原因导致无法全链路跟踪?

现在支持从nacos config获取.properties类型配置文件吗?

现在支持从nacos config获取.properties类型配置文件吗?,项目需要动态的配置一些除了nepxion相关配置之外的配置"如redis",但是nepxion好像只支持xml,json类型配置,且我把当前properties修改为xml也是无法初始化redis的

公共配置是否可以提取到一个文件中

现在貌似每个项目都维护着一些同样的配置, 是否可以将他们提取到一个文件或者项目中进行维护, 这样改起来比较简单,现在改都是用的全局替换..

基于hystrix的第一次请求都会报错

我是clone的最新的代码,也就是3.8.0-RC2来测试的,为了测试hystrix的效果,我对example的代码稍做了一点修改,下面我描述一下我遇到的问题。

依赖的修改:

<dependencies>
    <dependency>
        <groupId>com.nepxion</groupId>
        <!-- <artifactId>discovery-plugin-starter-eureka</artifactId> -->
            <artifactId>discovery-plugin-starter-consul</artifactId>
        <!-- <artifactId>discovery-plugin-starter-zookeeper</artifactId> -->
        <!--<artifactId>discovery-plugin-starter-nacos</artifactId>-->
    </dependency>

    <dependency>
        <groupId>com.nepxion</groupId>
            <artifactId>discovery-plugin-config-center-starter-apollo</artifactId>
        <!--<artifactId>discovery-plugin-config-center-starter-nacos</artifactId>-->
        <!-- <artifactId>discovery-plugin-config-center-starter-redis</artifactId> -->
    </dependency>

    <dependency>
        <groupId>com.nepxion</groupId>
        <artifactId>discovery-plugin-strategy-starter-service</artifactId>
    </dependency>

    <!-- 当服务用Hystrix做线程隔离的时候,才需要导入下面的包 -->
        <dependency>
        <groupId>com.nepxion</groupId>
        <artifactId>discovery-plugin-strategy-starter-hystrix</artifactId>
    </dependency>

    <!--<dependency>-->
        <!--<groupId>org.springframework.cloud</groupId>-->
        <!--<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>-->
    <!--</dependency>-->

    <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-starter-client</artifactId>
    </dependency>
</dependencies>

代码的修改:

ARestImpl.java

@RequestMapping(path = "/rest", method = RequestMethod.POST)
@HystrixCommand(threadPoolKey = "example-b", commandKey = "example-b")
public String rest(@RequestBody String value) {
    value = doRest(value);
    value = restTemplate.postForEntity("http://discovery-springcloud-example-b/rest", value, String.class).getBody();

    LOG.info("调用路径:{}", value);

    return value;
}

BRestImpl.java

@RequestMapping(path = "/rest", method = RequestMethod.POST)
@HystrixCommand(threadPoolKey = "example-c", commandKey = "example-c")
public String rest(@RequestBody String value) {
    value = doRest(value);
    value = restTemplate.postForEntity("http://discovery-springcloud-example-c/rest", value, String.class).getBody();

    LOG.info("调用路径:{}", value);

    return value;
}

CRestImpl.java

@RequestMapping(path = "/rest", method = RequestMethod.POST)
@HystrixCommand(threadPoolKey = "service-c", commandKey = "service-c")
public String rest(@RequestBody String value) {
    value = doRest(value);

    LOG.info("调用路径:{}", value);

    return value;
}

配置的修改:

bootstrap.properties

spring.application.strategy.hystrix.threadlocal.supported=true

然后我在用postman进行首次访问的时候,得到了如下的错误:

zuul:

Zuul端负载均衡用户定制触发:serviceId=discovery-springcloud-example-a, host=172.16.101.90:1100, metadata={version=1.0, group=example-service-group, region=dev, spring.application.discovery.plugin=Consul Plugin, spring.application.register.control.enabled=true, spring.application.discovery.control.enabled=true, spring.application.config.rest.control.enabled=true, spring.application.group.key=group, spring.application.context-path=/}
discovery 2018-11-29 10:09:36,251 INFO [hystrix-RibbonCommand-1] c.n.d.p.e.z.i.MyDiscoveryEnabledStrategy [MyDiscoveryEnabledStrategy.java:50] - Zuul端负载均衡用户定制触发:serviceId=discovery-springcloud-example-a, host=172.16.101.90:1101, metadata={version=1.1, group=example-service-group, region=qa, spring.application.discovery.plugin=Consul Plugin, spring.application.register.control.enabled=true, spring.application.discovery.control.enabled=true, spring.application.config.rest.control.enabled=true, spring.application.group.key=group, spring.application.context-path=/}
discovery 2018-11-29 10:10:36,489 WARN [http-nio-1400-exec-1] o.s.c.n.z.f.p.SendErrorFilter [SendErrorFilter.java:78] - Error during filtering
com.netflix.zuul.exception.ZuulException: Forwarding error
	at org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.handleException(RibbonRoutingFilter.java:188)
	at org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.forward(RibbonRoutingFilter.java:163)
	at org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.run(RibbonRoutingFilter.java:111)
	at com.netflix.zuul.ZuulFilter.runFilter(ZuulFilter.java:117)
	at com.netflix.zuul.FilterProcessor.processZuulFilter(FilterProcessor.java:193)
	at com.netflix.zuul.FilterProcessor.runFilters(FilterProcessor.java:157)
	at com.netflix.zuul.FilterProcessor.route(FilterProcessor.java:118)
	at com.netflix.zuul.ZuulRunner.route(ZuulRunner.java:96)
	at com.netflix.zuul.http.ZuulServlet.route(ZuulServlet.java:116)
	at com.netflix.zuul.http.ZuulServlet.service(ZuulServlet.java:81)
	at org.springframework.web.servlet.mvc.ServletWrappingController.handleRequestInternal(ServletWrappingController.java:157)
	at org.springframework.cloud.netflix.zuul.web.ZuulController.handleRequest(ZuulController.java:44)
	at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:50)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:111)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:103)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: com.netflix.client.ClientException: null
	at com.netflix.client.AbstractLoadBalancerAwareClient.executeWithLoadBalancer(AbstractLoadBalancerAwareClient.java:118)
	at org.springframework.cloud.netflix.zuul.filters.route.support.AbstractRibbonCommand.run(AbstractRibbonCommand.java:187)
	at org.springframework.cloud.netflix.zuul.filters.route.support.AbstractRibbonCommand.run(AbstractRibbonCommand.java:52)
	at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:302)
	at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:298)
	at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46)
	at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)
	at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
	at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
	at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
	at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
	at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
	at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
	at rx.Observable.unsafeSubscribe(Observable.java:10151)
	at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:51)
	at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)
	at rx.Observable.unsafeSubscribe(Observable.java:10151)
	at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41)
	at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30)
	at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
	at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
	at rx.Observable.unsafeSubscribe(Observable.java:10151)
	at rx.internal.operators.OperatorSubscribeOn$1.call(OperatorSubscribeOn.java:94)
	at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction$1.call(HystrixContexSchedulerAction.java:56)
	at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction$1.call(HystrixContexSchedulerAction.java:47)
	at com.nepxion.discovery.plugin.strategy.zuul.wrapper.DefaultCallableWrapper$1.call(DefaultCallableWrapper.java:32)
	at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction.call(HystrixContexSchedulerAction.java:69)
	at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	... 1 common frames omitted
Caused by: java.lang.RuntimeException: java.net.SocketTimeoutException: Read timed out
	at rx.exceptions.Exceptions.propagate(Exceptions.java:58)
	at rx.observables.BlockingObservable.blockForSingle(BlockingObservable.java:464)
	at rx.observables.BlockingObservable.single(BlockingObservable.java:341)
	at com.netflix.client.AbstractLoadBalancerAwareClient.executeWithLoadBalancer(AbstractLoadBalancerAwareClient.java:112)
	... 32 common frames omitted
Caused by: java.net.SocketTimeoutException: Read timed out
	at java.base/java.net.SocketInputStream.socketRead0(Native Method)
	at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115)
	at java.base/java.net.SocketInputStream.read(SocketInputStream.java:168)
	at java.base/java.net.SocketInputStream.read(SocketInputStream.java:140)
	at org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:137)
	at org.apache.http.impl.io.SessionInputBufferImpl.fillBuffer(SessionInputBufferImpl.java:153)
	at org.apache.http.impl.io.SessionInputBufferImpl.readLine(SessionInputBufferImpl.java:282)
	at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:138)
	at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56)
	at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259)
	at org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:163)
	at org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java:165)
	at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273)
	at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)
	at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:272)
	at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
	at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
	at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
	at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)
	at org.springframework.cloud.netflix.ribbon.apache.RibbonLoadBalancingHttpClient.execute(RibbonLoadBalancingHttpClient.java:82)
	at org.springframework.cloud.netflix.ribbon.apache.RibbonLoadBalancingHttpClient.execute(RibbonLoadBalancingHttpClient.java:42)
	at com.netflix.client.AbstractLoadBalancerAwareClient$1.call(AbstractLoadBalancerAwareClient.java:104)
	at com.netflix.loadbalancer.reactive.LoadBalancerCommand$3$1.call(LoadBalancerCommand.java:303)
	at com.netflix.loadbalancer.reactive.LoadBalancerCommand$3$1.call(LoadBalancerCommand.java:287)
	at rx.internal.util.ScalarSynchronousObservable$3.call(ScalarSynchronousObservable.java:231)
	at rx.internal.util.ScalarSynchronousObservable$3.call(ScalarSynchronousObservable.java:228)
	at rx.Observable.unsafeSubscribe(Observable.java:10151)
	at rx.internal.operators.OnSubscribeConcatMap$ConcatMapSubscriber.drain(OnSubscribeConcatMap.java:286)
	at rx.internal.operators.OnSubscribeConcatMap$ConcatMapSubscriber.onNext(OnSubscribeConcatMap.java:144)
	at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:185)
	at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:180)
	at rx.Observable.unsafeSubscribe(Observable.java:10151)
	at rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:94)
	at rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:42)
	at rx.Observable.unsafeSubscribe(Observable.java:10151)
	at rx.internal.operators.OperatorRetryWithPredicate$SourceSubscriber$1.call(OperatorRetryWithPredicate.java:127)
	at rx.internal.schedulers.TrampolineScheduler$InnerCurrentThreadScheduler.enqueue(TrampolineScheduler.java:73)
	at rx.internal.schedulers.TrampolineScheduler$InnerCurrentThreadScheduler.schedule(TrampolineScheduler.java:52)
	at rx.internal.operators.OperatorRetryWithPredicate$SourceSubscriber.onNext(OperatorRetryWithPredicate.java:79)
	at rx.internal.operators.OperatorRetryWithPredicate$SourceSubscriber.onNext(OperatorRetryWithPredicate.java:45)
	at rx.internal.util.ScalarSynchronousObservable$WeakSingleProducer.request(ScalarSynchronousObservable.java:276)
	at rx.Subscriber.setProducer(Subscriber.java:209)
	at rx.internal.util.ScalarSynchronousObservable$JustOnSubscribe.call(ScalarSynchronousObservable.java:138)
	at rx.internal.util.ScalarSynchronousObservable$JustOnSubscribe.call(ScalarSynchronousObservable.java:129)
	at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
	at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
	at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
	at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
	at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
	at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
	at rx.Observable.subscribe(Observable.java:10247)
	at rx.Observable.subscribe(Observable.java:10214)
	at rx.observables.BlockingObservable.blockForSingle(BlockingObservable.java:444)
	... 34 common frames omitted

DiscoveryApplicationA1

discovery 2018-11-29 10:09:38,604 ERROR [HystrixTimer-1] c.n.h.u.HystrixTimer [HystrixTimer.java:101] - Failed while ticking TimerListener
java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
	at org.springframework.web.context.request.RequestContextHolder.currentRequestAttributes(RequestContextHolder.java:131)
	at com.nepxion.discovery.plugin.strategy.service.wrapper.DefaultCallableWrapper.wrapCallable(DefaultCallableWrapper.java:24)
	at com.nepxion.discovery.plugin.strategy.hystrix.context.HystrixContextConcurrencyStrategy.wrapCallable(HystrixContextConcurrencyStrategy.java:81)
	at com.netflix.hystrix.strategy.concurrency.HystrixContextRunnable.<init>(HystrixContextRunnable.java:41)
	at com.netflix.hystrix.AbstractCommand$HystrixObservableTimeoutOperator$1.tick(AbstractCommand.java:1150)
	at com.netflix.hystrix.util.HystrixTimer$1.run(HystrixTimer.java:99)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
	at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
	at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:834)

DiscoveryApplicationB1

discovery 2018-11-29 10:09:41,241 ERROR [HystrixTimer-1] c.n.h.u.HystrixTimer [HystrixTimer.java:101] - Failed while ticking TimerListener
java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
	at org.springframework.web.context.request.RequestContextHolder.currentRequestAttributes(RequestContextHolder.java:131)
	at com.nepxion.discovery.plugin.strategy.service.wrapper.DefaultCallableWrapper.wrapCallable(DefaultCallableWrapper.java:24)
	at com.nepxion.discovery.plugin.strategy.hystrix.context.HystrixContextConcurrencyStrategy.wrapCallable(HystrixContextConcurrencyStrategy.java:81)
	at com.netflix.hystrix.strategy.concurrency.HystrixContextRunnable.<init>(HystrixContextRunnable.java:41)
	at com.netflix.hystrix.AbstractCommand$HystrixObservableTimeoutOperator$1.tick(AbstractCommand.java:1150)
	at com.netflix.hystrix.util.HystrixTimer$1.run(HystrixTimer.java:99)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
	at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
	at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:834)

然后我进行了第二次,第三次测试,则没有再出现这个错误,反复实验几次后,每次应用启动完成后,第一次都会报这个错误。

服务调用推荐dubbo还是feign

如题,Nepxion/DiscoveryGuide里面的样例是使用的feign。
请解惑下为什么没有使用 dubbo,是有什么原因呢?

springcloud gateway中 MySubscriber onCustomization 似乎不起作用

@EventBus
public class MySubscriber {
    @Autowired
    private PluginAdapter pluginAdapter;

    @Subscribe
    public void onCustomization(CustomizationEvent customizationEvent) {
        CustomizationEntity customizationEntity = customizationEvent.getCustomizationEntity();
        String serviceId = pluginAdapter.getServiceId();
        if (customizationEntity != null) {
            Map<String, Map<String, String>> customizationMap = customizationEntity.getCustomizationMap();
            Map<String, String> customizationParameter = customizationMap.get(serviceId);
            System.out.println("========== 获取客户化对象, serviceId=" + serviceId + ", customizationParameter=" + customizationParameter);
            // 根据customizationParameter的参数动态切换数据源
        } else {
            System.out.println("========== 获取客户化对象, serviceId=" + serviceId + ", customizationEntity=" + customizationEntity);
            // 根据customizationParameter的参数动态切换数据源
        }
    }

}

spring.application.type ,What does it do

error info:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pluginAdapter': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.application.type' in value "${spring.application.type}"
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:380) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1378) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:575) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:277) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1244) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1164) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
	... 79 common frames omitted
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.application.type' in value "${spring.application.type}"
	at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:172) ~[spring-core-5.1.4.RELEASE.jar:5.1.4.RELEASE]
	at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:124) ~[spring-core-5.1.4.RELEASE.jar:5.1.4.RELEASE]
	at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:237) ~[spring-core-5.1.4.RELEASE.jar:5.1.4.RELEASE]
	at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:211) ~[spring-core-5.1.4.RELEASE.jar:5.1.4.RELEASE]
	at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.lambda$processProperties$0(PropertySourcesPlaceholderConfigurer.java:175) ~[spring-context-5.1.4.RELEASE.jar:5.1.4.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:851) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1185) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1164) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:374) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
	... 90 common frames omitted
package com.nepxion.discovery.plugin.framework.adapter;

public abstract class AbstractPluginAdapter implements PluginAdapter {
    @Autowired
    protected Registration registration;
    @Autowired
    protected PluginCache pluginCache;
    @Autowired
    protected RuleCache ruleCache;
    @Value("${spring.application.group.key:group}")
    private String groupKey;
    @Value("${spring.application.type}")
    private String applicationType;

请教两个问题

  1. rule.xml 规则文件需要在每个微服务下存在一份吗?(如服务 网关1->A1->B1->C1,对应的同一个规则文件是否需要在 网关1,A1,B1,C1下都存在)
  2. discovery-console-desktop 一定要和一个注册中心一起使用吗?

readme,测试文档描述错误

  • 下面URL的端口号,可以是服务端口号,也可以是管理端口号
  • 通过版本切换,达到灰度访问控制,针对A服务
    • 1.1 通过Postman或者浏览器,执行POST http://localhost:1100/routes,填入discovery-springcloud-example-b;discovery-springcloud-example-c,查看路由路径,如图1,可以看到符合预期的调用路径.
      这块的路径根据源码看应该是http://localhost:1100/router/routes.
      @RequestMapping(path = "/router/routes", method = RequestMethod.POST)
      @ApiOperation(value = "获取全路径的路由信息树", notes = "参数按调用服务名的前后次序排列,起始节点的服务名不能加上去。如果多个用“;”分隔,不允许出现空格", response = RouterEntity.class, httpMethod = "POST")
      public RouterEntity routes(@requestbody @ApiParam(value = "例如:service-a;service-b", required = true) String routeServiceIds) {
      return routeTree(routeServiceIds);
      }.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.