2017-04-21 98 views
1

我正试图与领事和费恩一起设立一个春季云计划,但它不起作用。春云:假不能与领事合作

它始终注意到“com.netflix.client.ClientException:负载均衡器没有可用的服务器:客户端:设施读取器”。 这里是主类消费

@SpringBootApplication 
@EnableDiscoveryClient 
@EnableFeignClients 
public class Main { 
    public static void main(String[] args) throws Exception { 
     SpringApplication.run(Main.class, args); 
    } 
} 

,这里是我的用户界面使用假装

@FeignClient("facility-readers") 
public interface FacilitiesService { 
@RequestMapping(value="/facilities/info", method = RequestMethod.GET) 
public String findByIdFeign(); 
} 

这里是我的消费服务

@RestController 
@RequestMapping("/facilities") 
public class FacilitiesServiceImpl { 

    @Autowired 
    private FacilitiesService facilitiesService; 

    @RequestMapping(value = "/info", method = RequestMethod.GET) 
    public String getInfo() { 
     String reult=facilitiesService.findByIdFeign(); 

     System.out.println("服务消费者"); 
     return reult; 
    } 
} 

下面是用户档案application.yml

server: 
    display-name: 设备写服务 
    port: 8900 
spring: 
    application: 
    name: facility-writer 
    cloud: 
    consul: 
     host: 192.168.8.164 
     port: 8500 
     discovery: 
     register: true 
     enabled: true 
     instance-id: facility-${random.value} 
     service-name: 设备写服务 
     enabled: true 

这里是我的供应商勉类

@SpringBootApplication 
@EnableDiscoveryClient 
@ImportResource("spring-context.xml") 
public class Main { 
    public static void main(String[] args) { 
     SpringApplication.run(Main.class, args); 
    } 
} 

这里是我的供应商服务

@RestController 
@RequestMapping("/facilities") 
public class FacilitiesQueryServiceImpl { 

@RequestMapping(value = "/info", method = RequestMethod.GET) 
public String getInfo() { 
    System.out.println("服务提供方"); 
    return "调用成功"; 
} 
} 

下面是提供的文件application.yml

server: 
    display-name: 设施业务读服务 
    port: 8901 
spring: 
    application: 
    name: facility-reader 
    cloud: 
    consul: 
     host: 192.168.8.164 
     port: 8500 
     discovery: 
     register: true 
     enabled: true 
     instance-id: facility-reader 
     service-name: 设施业务读服务 
     enabled: true 

下面是pom.xml的内容

<dependencies> 
<!-- Spring cloud --> 
<dependency> 
    <groupId>org.springframework.cloud</groupId> 
    <artifactId>spring-cloud-starter-config</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.springframework.cloud</groupId> 
    <artifactId>spring-cloud-starter-consul-discovery</artifactId> 
    <version>1.1.5.RELEASE</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework.cloud</groupId> 
    <artifactId>spring-cloud-consul-discovery</artifactId> 
    <version>1.1.5.RELEASE</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-actuator</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.springframework.cloud</groupId> 
    <artifactId>spring-cloud-starter-feign</artifactId> 
</dependency> 
</dependency> 

在这个控制台中的内容

2017-04-21 14:13:31.347 INFO 18940 --- [ility-readers-1] c.netflix.config.ChainedDynamicProperty : Flipping property: facility-readers.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647 
2017-04-21 14:13:31.386 INFO 18940 --- [ility-readers-1] c.n.u.concurrent.ShutdownEnabledTimer : Shutdown hook installed for: NFLoadBalancer-PingTimer-facility-readers 
2017-04-21 14:13:31.452 INFO 18940 --- [ility-readers-1] c.netflix.loadbalancer.BaseLoadBalancer : Client:facility-readers instantiated a LoadBalancer:DynamicServerListLoadBalancer:{NFLoadBalancer:name=facility-readers,current list of Servers=[],Load balancer stats=Zone stats: {},Server stats: []}ServerList:null 
2017-04-21 14:13:31.457 INFO 18940 --- [ility-readers-1] c.n.l.DynamicServerListLoadBalancer  : Using serverListUpdater PollingServerListUpdater 
2017-04-21 14:13:31.607 INFO 18940 --- [ility-readers-1] c.n.l.DynamicServerListLoadBalancer  : DynamicServerListLoadBalancer for client facility-readers initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=facility-readers,current list of Servers=[],Load balancer stats=Zone stats: {},Server stats: []}ServerList:ConsulServerList{serviceId='facility-readers', tag=null} 
2017-04-21 14:13:31.872 ERROR 18940 --- [nio-8900-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.netflix.hystrix.exception.HystrixRuntimeException: FacilitiesService#findByIdFeign() failed and no fallback available.] with root cause 

com.netflix.client.ClientException: Load balancer does not have available server for client: facility-readers 
    at com.netflix.loadbalancer.LoadBalancerContext.getServerFromLoadBalancer(LoadBalancerContext.java:468) ~[ribbon-loadbalancer-2.2.0.jar:2.2.0] 
    at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:184) ~[ribbon-loadbalancer-2.2.0.jar:2.2.0] 
    at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:180) ~[ribbon-loadbalancer-2.2.0.jar:2.2.0] 
    at rx.Observable.unsafeSubscribe(Observable.java:10211) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:94) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:42) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.Observable.unsafeSubscribe(Observable.java:10211) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.operators.OperatorRetryWithPredicate$SourceSubscriber$1.call(OperatorRetryWithPredicate.java:127) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.schedulers.TrampolineScheduler$InnerCurrentThreadScheduler.enqueue(TrampolineScheduler.java:73) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.schedulers.TrampolineScheduler$InnerCurrentThreadScheduler.schedule(TrampolineScheduler.java:52) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.operators.OperatorRetryWithPredicate$SourceSubscriber.onNext(OperatorRetryWithPredicate.java:79) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.operators.OperatorRetryWithPredicate$SourceSubscriber.onNext(OperatorRetryWithPredicate.java:45) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.util.ScalarSynchronousObservable$WeakSingleProducer.request(ScalarSynchronousObservable.java:276) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.Subscriber.setProducer(Subscriber.java:209) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.util.ScalarSynchronousObservable$JustOnSubscribe.call(ScalarSynchronousObservable.java:138) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.util.ScalarSynchronousObservable$JustOnSubscribe.call(ScalarSynchronousObservable.java:129) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.Observable.subscribe(Observable.java:10307) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.Observable.subscribe(Observable.java:10274) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.observables.BlockingObservable.blockForSingle(BlockingObservable.java:445) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.observables.BlockingObservable.single(BlockingObservable.java:342) ~[rxjava-1.1.10.jar:1.1.10] 
    at com.netflix.client.AbstractLoadBalancerAwareClient.executeWithLoadBalancer(AbstractLoadBalancerAwareClient.java:102) ~[ribbon-loadbalancer-2.2.0.jar:2.2.0] 
    at org.springframework.cloud.netflix.feign.ribbon.LoadBalancerFeignClient.execute(LoadBalancerFeignClient.java:63) ~[spring-cloud-netflix-core-1.2.3.RELEASE.jar:1.2.3.RELEASE] 
    at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:97) ~[feign-core-9.3.1.jar:na] 
    at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:76) ~[feign-core-9.3.1.jar:na] 
    at feign.hystrix.HystrixInvocationHandler$1.run(HystrixInvocationHandler.java:108) ~[feign-hystrix-9.3.1.jar:na] 
    at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:301) ~[hystrix-core-1.5.6.jar:1.5.6] 
    at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:297) ~[hystrix-core-1.5.6.jar:1.5.6] 
    at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.Observable.unsafeSubscribe(Observable.java:10211) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:51) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.Observable.unsafeSubscribe(Observable.java:10211) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.Observable.unsafeSubscribe(Observable.java:10211) ~[rxjava-1.1.10.jar:1.1.10] 
    at rx.internal.operators.OperatorSubscribeOn$1.call(OperatorSubscribeOn.java:94) ~[rxjava-1.1.10.jar:1.1.10] 
    at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction$1.call(HystrixContexSchedulerAction.java:56) ~[hystrix-core-1.5.6.jar:1.5.6] 
    at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction$1.call(HystrixContexSchedulerAction.java:47) ~[hystrix-core-1.5.6.jar:1.5.6] 
    at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction.call(HystrixContexSchedulerAction.java:69) ~[hystrix-core-1.5.6.jar:1.5.6] 
    at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55) ~[rxjava-1.1.10.jar:1.1.10] 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[na:1.8.0_60] 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_60] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_60] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[na:1.8.0_60] 
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_60] 

我的项目出了什么问题?

+0

您是否在yrou客户端中使用了DiscoveryClient? https://github.com/spring-cloud/spring-cloud-consul/blob/master/docs/src/main/asciidoc/spring-cloud-consul.adoc#using-the-discoveryclient –

回答

0

我有同样的问题,并发现这种情况发生的愚蠢原因:我认为导入Feign就足够了。但实际上我是缺少这种依赖性:

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

(不要忘记在名称中STARTER)

一旦我用它,我看到我的应用程序10秒后启动,一些相关的领事活动日志发生了,即使没有做任何事情,这是一个好兆头。然后我确认它按预期工作。

+0

我们使用'spring .cloud.consul.discovery.instance-zone'与Consul中注册的所有服务,但不知道如何从客户端过滤以确保可发现的服务仅开发,仅限qa或prod;你知道吗? – raffian