如何实现spring-foreign-post和delete



我构建了一个spring云服务,包含eureka、用户服务(spring-data-rerest用户api)和一个外部客户端服务。

在外国客户:

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

我想通过调用用户服务api来实现在外部客户端中删除和存储用户。因此,我创建了一个rest控制器(js将数据传输给它们):

@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";
    }

但它总是遇到错误:

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.springframework.cloud.netflix.ribbon.eureka.DomainExtractingServerList@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]

也许上面的存储和删除方法有问题,但谁能告诉我正确或更好?

您的Hystrix命令似乎超时了。假设你没有任何特定的Hystrix命令(在你的帖子中没有提到),Hystrix是一种断路器技术,Feign客户端免费提供。您可以使用以下功能禁用此功能:

feign.hystrix.enabled=false

(有关Feign Hystrix集成的更多信息,请访问http://cloud.spring.io/spring-cloud-netflix/spring-cloud-netflix.html#spring-云(hystrix)

这不会解决路线问题,因为有些事情需要很长时间才能完成。您需要调试并找出挂起的内容。它可能是您的Feign客户端指向的正在连接但没有响应的实际端点,尽管在这种情况下,我通常会看到特定的连接超时异常。

这不是实际的异常,您应该找到它超时的原因。启用日志记录,然后你可以看到它失败的原因:

import org.springframework.context.annotation.Bean;
import feign.Logger;
public class FeignConfiguration {
    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }
}

还要查看服务器是否已解析。你的日志应该有如下内容:

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.springframework.cloud.netflix.ribbon.eureka.DomainExtractingServerList@9481a7c

相关内容

  • 没有找到相关文章

最新更新