shop-user模块
shop-user-client模块
提供远程调用的接口依赖spring-cloud-openfeign-core:2.2.2.RELEASE,以及调用失败的类
//shop-user模块下的/user
@FeignClient(value=ConstantsClient.USER_CLIENT,path=ConstantsClient.USER,fallbackFactory = AddressFallbackFactory.class)//
public interface AddressClient{
//查询用户默认地址
@RequestMapping(value="/address/default/{userId}",method=RequestMethod.POST)
Response<AddressResponse> address(@PathVariable("userId") Long userId);
//获取地址信息
@RequestMapping(value="/address/{addressId}/info",method=RequestMethod.POST)
Response<AddressResponse> info(@PathVariable("addressId") Long addressId);
}
AddressFallbackFactory
// io.github.openfeign:feign-hystrix:10.7.4
@Component
public class AddressFallbackFactory implements FallbackFactory<AddressClient>{
@Override
public AddressClient create(Throwable cause){
return null;
}
}
shop-user-api模块
业务上的Controller接口,进行调用具体的Service服务
@RestController
@RequestMapping(ConstantsClient.USER) //路径:/user
public class AddressController implements AddressClient{
@Autowired
private AddressService;
@Override
@PostMapping("/address/default/{userId}")
public Response<AddressResponse> address(@PathVariable("userId") Long userId){
return addressService.address(userId);
}
@Override
@PostMapping("/address/{addressId}/info")
public Response<AddressResponse> info(@PathVariable("addressId") Long addressId) {
return Response.toResponse(addressService.queryByPrimaryKey(addressId));
}
}
启动类开启注解@EnableFeignClients
@SpringCloudApplication
@EnableFeignClients
@EnableAspectJAutoProxy(proxyTargetClass=true)
public class User{
public static void main(String[] args) {
SpringApplication.run(User.class, args);
}
}
=================================================
spring-cloud-openfeign-core强化
①、UserClient接口以及UserFallbackFactory
/**
shop-user /user
*/
@FeignClient(value=ConstantsClient.USER_CLIENT,path=ConstantsClient.USER,fallbackFactory = UserFallbackFactory.class)
public interface UserClient{
@RequestMapping(value="/profile/{userId}",method=RequestMethod.Post)
Response<UserProfileResponse> profile(@PathVariable("userId") Long userId);
@RequestMapping(value = "/profile/{phone}/info", method = RequestMethod.POST)
Response<UserProfileResponse> profileInfo(@PathVariable("phone") String phone);
//UserRequest参数已被封装为继承Serializable的实体类
@RequestMapping(value = "/batch/profile", method = RequestMethod.POST)
Response<List<UserProfileResponse>> batchProfile(@RequestBody UserRequest request);
}
@Slf4j
@Component
public class UserFallbackFactory implements FallbackFactoty<UserClient>{//feign-hystrix:10.7.4
@Override
public UserClient create(Throwable cause){
log.error("UserClient 进入熔断措施 msg = {}", cause.getMessage());
return new UserClienet(){
@Override
public Response<UserProfileResponse> profile(Long userId){
log.error("进入熔断措施 UserClient.profile");
return Response.toError(ResponseStatus.Code.EXCEPTION_CODE, ResponseStatus.PARAMS_EXCEPTION);//3000 网络出点小问题
}
@Override
public Response<UserProfileResponse> profileInfo(String phone){
log.error("进入熔断措施 UserClient.profileInfo");
return Response.toError(ResponseStatus.Code.EXCEPTION_CODE, ResponseStatus.PARAMS_EXCEPTION);
}
@Override
public Response<List<UserProfileResponse>> batchProfile(UserRequest request){
log.error("进入熔断措施 UserClient.batchProfile");
return Response.toError(ResponseStatus.Code.EXCEPTION_CODE, ResponseStatus.PARAMS_EXCEPTION);
}
}
}
}
②、业务Controller接口进行继承UserClient接口
@RestController
@RequestMapping(ConstantsClient.USER)//路径/user
public class UserController implements UserClient{
@Autowired
private UserService userService;
@Override
@PostMapping("/profile/{userId}")
public Response<UserProfileResponse> profile(@PathVariable("userId") Long userId) {
return userService.profile(userId);
}
@Override
@PostMapping("/profile/{phone}/info")
public Response<UserProfileResponse> profileInfo(@PathVariable("phone") String phone) {
return userService.profileInfo(phone);
}
@Override
@PostMapping("/batch/profile")
public Response<List<UserProfileResponse>> batchProfile(@RequestBody UserRequest request) {
return userService.batchProfile(request);
}
}
ServiceImpl—>远程调用SystemConfigClient—>SystemConfigClientFallback
①、启动类开启@EnableFeignClients
②、ServiceImpl
@Autowired
private SystemConfigClient systemConfigClient;
@Override
public Response<List<ActivityResponse>> queryPage(final ActivityPageRequest request){
log.info("请求参数{}",JSON.toJSONString(request));//将对象转换为json字符串 com.alibaba:fastjson:1.2.47
//调用远程模块接口
Response<List<SystemConfigResponse>> = systemConfigClient.queryPage(new SystemConfigPageRequest());
System.out.println(listResponse);
LambdaQueryWrapper<Activity> qw = new LambdaQueryWrapper<Activity>()
.likeRight()
.eq()
.eq()
.eq();
if(CollectionUtils.isNotEmpty(request.getRange())){
qw.between();
}
Response<List<Activity>> response = this.toPage();
return Response.toResponse(response.getData().stream()
.map(this::convert).collect(Collectors.toList()),response.getTotal());
}
远程模块接口
/**
"shop-platform"
"/platform"
*/
@FeignClient(value=ConstantsClient.PLATFORM_CLIENT, path = ConstantsClient.PLATFORM, fallbackFactory = SystemConfigClientFallback.class)
public interface SystemConfigClient {
/**
* 创建
*/
@RequestMapping(value = "/config/create", method = RequestMethod.POST)
Response<Long> create(@RequestBody SystemConfigSaveRequest request);
/**
* 创建配置
*/
@RequestMapping(value = "/config/modify", method = RequestMethod.PUT)
Response<Long> modify(@RequestBody SystemConfigSaveRequest request);
/**
* 查询配置列表,无分页
*/
@RequestMapping(value = "/config/list", method = RequestMethod.GET)
Response<List<SystemConfigResponse>> queryList(SystemConfigOtherRequest request);
/**
* 查询配置列表分页
*/
@RequestMapping(value = "/config/page", method = RequestMethod.POST)
Response<List<SystemConfigResponse>> queryPage(@RequestBody SystemConfigPageRequest request);
}
@Component
@Slf4j
public class SystemConfigClientFallback implements FallbackFactory<SystemConfigClient> {
@Override
public SystemConfigClient create(Throwable cause) {
return new SystemConfigClient() {
@Override
public Response<Long> create(SystemConfigSaveRequest request) {
log.error("SystemConfigClient.create 进入熔断措施 msg = {}", cause.getMessage());
return Response.toError(ResponseStatus.Code.EXCEPTION_CODE, ResponseStatus.PARAMS_EXCEPTION);
}
@Override
public Response<Long> modify(SystemConfigSaveRequest request) {
log.error("SystemConfigClient.modify 进入熔断措施 msg = {}", cause.getMessage());
return Response.toError(ResponseStatus.Code.EXCEPTION_CODE, ResponseStatus.PARAMS_EXCEPTION);
}
@Override
public Response<List<SystemConfigResponse>> queryList(SystemConfigOtherRequest request) {
log.error("SystemConfigClient.queryList 进入熔断措施 msg = {}", cause.getMessage());
return Response.toError(ResponseStatus.Code.EXCEPTION_CODE, ResponseStatus.PARAMS_EXCEPTION);
}
@Override
public Response<List<SystemConfigResponse>> queryPage(SystemConfigPageRequest request) {
log.error("SystemConfigClient.queryPage 进入熔断措施 msg = {}", cause.getMessage());
return Response.toError(ResponseStatus.Code.EXCEPTION_CODE, ResponseStatus.PARAMS_EXCEPTION);
}
};
}
}