Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
假装客户端执行失败:java.lang.reflect.InvocationTargetException_Java_Spring_Spring Cloud_Netflix Feign_Netflix Ribbon - Fatal编程技术网

假装客户端执行失败:java.lang.reflect.InvocationTargetException

假装客户端执行失败:java.lang.reflect.InvocationTargetException,java,spring,spring-cloud,netflix-feign,netflix-ribbon,Java,Spring,Spring Cloud,Netflix Feign,Netflix Ribbon,我在服务间通信负载平衡方面有问题 我正在使用spring(1.4.2),netflixOSS的spring云 我有两个服务shoppingcart服务和用户服务 以下是ShoppingCart服务应用程序中的ShoppingCartController: @RestController @RequestMapping("shoppingCarts") public class ShoppingCartController extends AbstractRESTController<Sho

我在服务间通信负载平衡方面有问题

我正在使用spring(1.4.2),netflixOSS的spring云

我有两个服务shoppingcart服务和用户服务

以下是ShoppingCart服务应用程序中的ShoppingCartController:

@RestController
@RequestMapping("shoppingCarts")
public class ShoppingCartController extends AbstractRESTController<ShoppingCart, String>{

private ShoppingCartService shoppingCartSrevice;

@Autowired
public ShoppingCartController(ShoppingCartService service) {
    super(service);
    this.shoppingCartSrevice = service;
}

@RequestMapping(value = "{userId}/createShoppingCart", method = RequestMethod.POST)
ShoppingCart createShoppingCart(
        @RequestBody List<CartItem> items,
        @PathVariable(name = "userId") String userId
        ){

    Boolean userOK = shoppingCartSrevice.checkUser(userId);

    if(userOK != null)
        if(userOK)
            return shoppingCartSrevice.createShoppingCart(items, userId);

    return null;
}

@FeignClient("user-service")//the server.port property name, for the "server" service
public interface UserServiceClient {
    @RequestMapping(value = "users/checkUser", method = RequestMethod.POST)// the endpoint which will be balanced over
    Boolean checkUser(
            @RequestParam(name = "userId") String userId);// the method specification must be the same as for users/hello
}
@RestController
@请求映射(“购物车”)
公共类ShoppingCartController扩展AbstractRESTController{
私人购物车服务购物车服务;
@自动连线
公共购物车控制器(购物车服务){
超级(服务);
this.shoppingCartSrevice=服务;
}
@RequestMapping(value=“{userId}/createShoppingCart”,method=RequestMethod.POST)
ShoppingCart创建ShoppingCart(
@请求主体列表项,
@PathVariable(name=“userId”)字符串userId
){
布尔userOK=shoppingCartSrevice.checkUser(userId);
if(userOK!=null)
如果(userOK)
return shoppingCartSrevice.createShoppingCart(项目,用户ID);
返回null;
}
@佯装客户端(“用户服务”)//“服务器”服务的server.port属性名称
公共接口UserServiceClient{
@RequestMapping(value=“users/checkUser”,method=RequestMethod.POST)//将平衡的端点
布尔校验用户(
@RequestParam(name=“userId”)String userId);//方法规范必须与users/hello相同
}
}

“检查用户”

方法来自ShoppingCartService类:

@Service
public class ShoppingCartService extends AbstractCRUDService<ShoppingCart, String>{

private ShoppingCartRepository shoppingCartRepository;
private RestTemplate restTemplate;

@Autowired
private UserServiceClient userServiceClient;// feign client

@Autowired
public ShoppingCartService(ShoppingCartRepository repo, RestTemplate restTemplate) {
    super(repo);
    this.shoppingCartRepository = repo;
    this.restTemplate = restTemplate;

}

/**
 * Method checks if the given user is registered and active
 * We use Ribbon and Feign to get data from user-service, load-balancing 
 * @param userId
 * @return
 */
@HystrixCommand(fallbackMethod="fallbackCheckUser")
public Boolean checkUser(String userId) {

    /*USING LOAD-BALANCING*/
     Boolean resp = userServiceClient.checkUser(userId);//HERE I GET THE EXCEPTION
     return resp;
}

public Boolean fallbackCheckUser(String userId){
    return true;
}
@服务
公共类ShoppingCartService扩展了AbstractCRUDService{
私人购物车存储库购物车存储库;
私有RestTemplate RestTemplate;
@自动连线
私有UserServiceClient UserServiceClient;//假客户端
@自动连线
公共ShoppingCartService(ShoppingCartRepository repo,RestTemplate RestTemplate){
超级(回购);
this.shoppingCartRepository=repo;
this.restTemplate=restTemplate;
}
/**
*方法检查给定用户是否已注册并处于活动状态
*我们使用Ribbon和Faign从用户服务、负载平衡中获取数据
*@param userId
*@返回
*/
@HystrixCommand(fallbackMethod=“fallbackCheckUser”)
公共布尔checkUser(字符串userId){
/*使用负载平衡*/
Boolean resp=userServiceClient.checkUser(userId);//这里我得到了异常
返回响应;
}
公共布尔fallbackCheckUser(字符串用户ID){
返回true;
}
当我尝试执行checkUser(userId)@HystricsCommand方法时,我得到了:java.lang.reflect.InvocationTargetException

请帮忙

更新1:

shoppingcart服务pom.xml:

 <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>rs.uns.acs.ftn</groupId>
    <artifactId>ShoppingCartService</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>ShoppingCartService</name>
    <description>Shopping Cart Service</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.jglue.fluent-json</groupId>
            <artifactId>fluent-json</artifactId>
            <version>2.0.3</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Camden.SR2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

4.0.0
rs.uns.acs.ftn
购物车服务
0.0.1-快照
罐子
购物车服务
购物车服务
org.springframework.boot
spring启动程序父级
1.4.2.1发布
UTF-8
UTF-8
1.8
org.springframework.cloud
春云起动器
org.springframework.cloud
春云
org.springframework.cloud
春云起动带
org.springframework.boot
弹簧靴起动器执行器
org.springframework.cloud
春云起动器尤里卡
org.springframework.boot
spring启动程序数据mongodb
org.springframework.boot
SpringBootStarterWeb
org.jglue.fluent-json
流畅的json
2.0.3
org.springframework.boot
弹簧起动试验
测试
org.springframework.cloud
spring云依赖关系
Camden.SR2
聚甲醛
进口
org.springframework.boot
springbootmaven插件

Spring Cloud
Feign
Ribbon
除了这些“
REST
”端点似乎没有遵循推荐的做法

POST
要检查用户是否存在,通常使用
POST
创建用户或产品等资源

POST
to/…/{userId}/createShoppingCart看起来也不太合适。在
REST
API设计中建议使用名词,/users、/products、/users/{id}和HTTP动词(POST、PUT、PATCH、DELETE、GET等)表示对这些“名词”的操作:POST/users表示创建用户,PUT/products/{id}表示更新id为的产品{id}。通常不建议将动词作为URL的一部分

正如@spencergib所提到的,如果没有配置文件(application.yml或properties)、源代码和有意义的stacktrace,就很难解决这个问题


一个可能的问题可能是您的
pom
文件缺少
中的
元素。请添加更多的异常。这一行是无用的。异常对象上的堆栈跟踪是空的,而且我在控制台上也没有得到任何输出。我还与Eureka和Zuul一起运行了另外3个服务。我将把pom.xml放在r shoppingcart服务,请参阅更新。我不知道如何帮助,除非您能提供示例。Camden.SR6是Camden发布train.com.netflix.hystrix.exception.hystrix RuntimeException:UserServiceClient#checkUser(字符串)中的最新版本执行时失败。这有什么想法吗?这是我唯一能得到的。我想我知道我做了什么。我有两个使用相同的伪客户端规范的服务:@FeignClient(“用户服务”)。@spencergib你能告诉我为什么吗?HTTP API规范在不同的用例中是不同的。但这是