springcloud feign远程调用服务实践

 一、下面步骤是实现feign远程服务调用

1、服务器-提供者

//服务器-提供者(provider),项目ID:user-service
@RestController
@RequestMapping("user")
class UserController implements  UserFacade{

    @Autowired
    @Qualifier("userServiceImpl")
    UserService userService;

    @RequestMapping("getUserById")
    @Override
    public User getUserById(@RequestParam("userId") String userId) {
        return userService.getUserById(userId);
    }

    @RequestMapping("saveUser")
    @Override
    public User saveUser(@RequestBody User user) {
        return userService.saveUser(user);
    }
}


interface UserService {
     User getUserById(String userId);
     User getUserByUserName(String userName);
     User saveUser(User user);
}

@Service
class UserServiceImpl implements UserService {

    @Override
    public User getUserById(String userId) {
        System.out.println("根据用户ID获取用户对象");
        return null;
    }

    @Override
    public User getUserByUserName(String userName) {
        System.out.println("根据用户名获取用户对象");
        return null;
    }

    @Override
    public User saveUser(User user) {
        System.out.println("保存用户对象");
        return null;
    }

}

2、客户端-消费者

注释:product-service在此处是充当消费者角色,当它对外提供服务也可以充当提供者。所有一个服务既可以是提供者也可以是消费者。提供者与消费者可以相互调用

//客户端-消费者(consumer),项目ID:product-service
//客户端消费提供端提供的用户查询和保存功能

/**
 * @ClassName ProductController
 * @Description feign的调用
 * @Author Neal
 * @Date 2019/4/29 14:47
 * @Version 1.0
 */
@RestController
@RequestMapping("product")
 class ProductController{

    @Autowired
    private UserFeign userFeign;

    @RequestMapping("getUserProduct")
    public String getUserProduct(@RequestParam("userId") String userId) {
        //远程调用获取用户数据
        User user = userFeign.getUserById(userId);
        //下面获取用户购买产品代码省略....
        return null;
    }

}


//远程调用接口
@FeignClient(name = "user-service")
 interface UserFeign extends UserFacade{

    //这方法可以省略,因为集成接口了
    @GetMapping(value = "/user/getUserById",consumes = MediaType.APPLICATION_JSON_VALUE)
    User getUserById(String userId);

    //这方法可以省略,因为集成接口了
    @PostMapping(value = "/user/saveUser",consumes = MediaType.APPLICATION_JSON_VALUE)
    User saveUser(@RequestBody User user);
}

  

3、公共接口部分

//公共接口(提供端和消费端都依赖的接口)
interface UserFacade {
    @GetMapping(value = "/user/getUserById",consumes = MediaType.APPLICATION_JSON_VALUE)
    User getUserById(String userId);

    @PostMapping(value = "/user/saveUser",consumes = MediaType.APPLICATION_JSON_VALUE)
    User saveUser(@RequestBody User user);
}

  

4、配置

4.1、客户端pom.xml添加依赖jar

在客户端pom.xml文件中,增加相关依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

 

5、测试步骤

项目启动顺序:register(注册中心) -> provider(提供者:user-service) -> consumer(消费者:product-service)
启动完成后查看服务是否已经注册上注册中心:http://localhost:9090

  

原文地址:https://www.cnblogs.com/chenweichu/p/12205902.html