Controller调用@FeignClient

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);
            }
        };
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值