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