2016-04-16 1 views
0

Je construis un service de nuage de printemps, contient eureka, service utilisateur (printemps-données-repos utilisateur api) et un service feign-client.comment implémenter feign printemps post et supprimer

Dans le client feindre:

@FeignClient("useraccount") 
public interface UserFeign { 
    @RequestMapping(method=RequestMethod.POST,value="/users",consumes = "application/json") 
    void createUser(@RequestBody User user); 
    @RequestMapping(method=RequestMethod.DELETE,value="https://stackoverflow.com/users/{id}") 
    void delById (@PathVariable("id") String id); 

Je veux mettre en œuvre et le stockage des utilisateurs de retirer à feindre-client en appelant api-service utilisateur. Donc, je crée un contrôleur de repos (transfert js données pour eux):

@Autowired 
    private UserFeign userFeign; 

//save controller 

@RequestMapping(method = RequestMethod.POST, value = "/property/register") 
    public ResponseEntity<?> createUser(@RequestBody User user) { 
      userSaveFeign.createUser(user); 
      return ResponseEntity.ok(); 
    } 


// and delete controller 

@RequestMapping(method = RequestMethod.DELETE, value = "/property/{id}") 
    public String hello(@PathVariable("id") String id){ 
      userSaveFeign.delById(id); 
     } 
     return "hello"; 
    } 

mais il a toujours rencontré des erreurs:

2016-04-16 20:05:41.162 .DynamicServerListLoadBalancer  DynamicServerListLoadBalancer for client useraccount initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=useraccount,current list of Servers=[192.168.1.101:useraccount:d3fb971b6fe30dc5e9cbfdf0e713cd12],Load balancer stats=Zone stats: {defaultzone=[Zone:defaultzone; Instance count:1; Active connections count: 0; Circuit breaker tripped count: 0; Active connections per server: 0.0;] 
},Server stats: [[Server:192.168.1.101:useraccount:d3fb971b6fe30dc5e9cbfdf0e713cd12; Zone:defaultZone; Total Requests:0; Successive connection failure:0; Total blackout seconds:0; Last connection made:Thu Jan 01 08:00:00 CST 1970; First connection made: Thu Jan 01 08:00:00 CST 1970; Active Connections:0; total failure count in last (1000) msecs:0; average resp time:0.0; 90 percentile resp time:0.0; 95 percentile resp time:0.0; min resp time:0.0; max resp time:0.0; stddev resp time:0.0] 
]}ServerList:org.springf[email protected]19c54b19 
2016-04-16 20:05:41.836[2m[nio-8002-exec-4][36mo.a.c.c.C.[.[.[/].[dispatcherServlet] [0;39m Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.netflix.hystrix.exception.HystrixRuntimeException: createUser timed-out and no fallback available.] with root cause 

java.util.concurrent.TimeoutException: null 
    at com.netflix.hystrix.AbstractCommand$9.call(AbstractCommand.java:600) ~[hystrix-core-1.5.1.jar:1.5.1] 
    at com.netflix.hystrix.AbstractCommand$9.call(AbstractCommand.java:580) ~[hystrix-core-1.5.1.jar:1.5.1] 
    at rx.internal.operators.OperatorOnErrorResumeNextViaFunction$1.onError(OperatorOnErrorResumeNextViaFunction.java:99) ~[rxjava-1.0.14.jar:1.0.14] 
    at rx.internal.operators.OperatorDoOnEach$1.onError(OperatorDoOnEach.java:70) ~[rxjava-1.0.14.jar:1.0.14] 
    at rx.internal.operators.OperatorDoOnEach$1.onError(OperatorDoOnEach.java:70) ~[rxjava-1.0.14.jar:1.0.14] 
    at com.netflix.hystrix.AbstractCommand$HystrixObservableTimeoutOperator$1.run(AbstractCommand.java:955) ~[hystrix-core-1.5.1.jar:1.5.1] 
    at com.netflix.hystrix.strategy.concurrency.HystrixContextRunnable$1.call(HystrixContextRunnable.java:41) ~[hystrix-core-1.5.1.jar:1.5.1] 
    at com.netflix.hystrix.strategy.concurrency.HystrixContextRunnable$1.call(HystrixContextRunnable.java:37) ~[hystrix-core-1.5.1.jar:1.5.1] 
    at com.netflix.hystrix.strategy.concurrency.HystrixContextRunnable.run(HystrixContextRunnable.java:57) ~[hystrix-core-1.5.1.jar:1.5.1] 
    at com.netflix.hystrix.AbstractCommand$HystrixObservableTimeoutOperator$2.tick(AbstractCommand.java:972) ~[hystrix-core-1.5.1.jar:1.5.1] 
    at com.netflix.hystrix.util.HystrixTimer$1.run(HystrixTimer.java:99) ~[hystrix-core-1.5.1.jar:1.5.1] 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[na:1.8.0_40] 
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) ~[na:1.8.0_40] 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) ~[na:1.8.0_40] 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) ~[na:1.8.0_40] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_40] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[na:1.8.0_40] 
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_40] 

Peut-être que le magasin ci-dessus et supprimer la méthode ont des problèmes, mais qui peut me dire le droit ou mieux?

Répondre

4

Il semble que votre commande Hystrix expire. En supposant que vous n'avez pas spécifiquement de Commandes Hystrix (comme cela n'est pas mentionné dans votre message), Hystrix est une technologie de disjoncteur incluse gratuitement avec Feign Client. Vous pouvez désactiver cela avec:

feign.hystrix.enabled=false 

(Vous pouvez trouver plus d'informations sur l'intégration Feindre-Hystrix à http://cloud.spring.io/spring-cloud-netflix/spring-cloud-netflix.html#spring-cloud-feign-hystrix)

ne réglera pas la cause de la route que quelque chose prend beaucoup de temps. Vous aurez besoin de déboguer et de découvrir ce qui pend. Il peut s'agir du point de terminaison réel auquel votre client Feign est connecté mais qui ne répond pas, bien que je m'attendrais généralement à voir une exception de délai de connexion spécifique dans ce cas.

0

Ce n'est pas l'exception réelle, vous devriez trouver la raison pour laquelle son délai d'attente. Activer la journalisation, vous pouvez voir pourquoi il échoue:

import org.springframework.context.annotation.Bean; 

import feign.Logger; 

public class FeignConfiguration { 

    @Bean 
    Logger.Level feignLoggerLevel() { 
     return Logger.Level.FULL; 
    } 
} 

Vérifiez également si le serveur est résolu. Votre journal devrait avoir quelque chose comme ci-dessous:

DynamicServerListLoadBalancer for client auth-service initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=auth-service,current list of Servers=[192.168.2.243:7277],Load balancer stats=Zone stats: {defaultzone=[Zone:defaultzone; Instance count:1; Active connections count: 0; Circuit breaker tripped count: 0; Active connections per server: 0.0;] 
},Server stats: [[Server:192.168.2.243:8180; Zone:defaultZone; Total Requests:0; Successive connection failure:0; Total blackout seconds:0; Last connection made:Thu Jan 01 06:00:00 BDT 1970; First connection made: Thu Jan 01 06:00:00 BDT 1970; Active Connections:0; total failure count in last (1000) msecs:0; average resp time:0.0; 90 percentile resp time:0.0; 95 percentile resp time:0.0; min resp time:0.0; max resp time:0.0; stddev resp time:0.0] 
]}ServerList:org.springf[email protected]9481a7c