一、下面步驟是實現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
