前言
公司項目進行微服務改造,由之前的dubbo改用SpringCloud,微服務之間通過FeignClient進行調用,今天在測試的時候,eureka注冊中心有相應的服務,但feignclient就是無法調通,一直報404錯誤,排查過程如下:
一、問題:
服務提供方定義的接口如下:
/** * 黑白名單查詢接口 * * @author LiJunJun * @since 2018/10/18 */@Component(value = "blackAndWhiteListFeignClient")@FeignClient(value = "pear-cache-service", path = "v1/cache/limitlist")public interface IBlackAndWhiteListFeignClient { /** * 獲取黑白名單手機號分組編號 * * @param trace 請求流水 * @param phoneNum 電話號碼 * @return 電話號碼所在分組 */ @RequestMapping(value = "/blackAndWhiteList", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) ResultData<String> blackAndWhiteList(@RequestHeader(name = "Trace") String trace, @RequestParam("phoneNum") String phoneNum);}
接口實現類如下:
/** * 黑白名單controller * * @author LiJunJun * @since 2018/10/18 */@ProtectedLdApi@RestController@RequestMapping(value = "v1/cache/limitlist")@Api(value = "黑白名單緩存", description = "黑白名單緩存相關接口")public class BlacklAndWhiteListController extends AbstractController implements IBlackAndWhiteListFeignClient { /** * 日志記錄器 */ private final static Log LOGGER = new Log(BlacklAndWhiteListController.class); /** * 注入tedis */ @Autowired private JedisSentinelPoolExt jedisSentinelPool; /** * 獲取黑白名單手機號分組編號 * * @param trace 請求流水 * @param phoneNum 電話號碼 * @return 電話號碼所在分組 */ @Override @ApiOperation(value = "獲取黑白名單手機號分組編號", notes = "根據電話號碼從緩存中獲取黑白名單分組") @RequestMapping(value = "/blackAndWhiteList", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public ResultData<String> blackAndWhiteList(@RequestHeader(name = "Trace") String trace, @RequestParam("phoneNum") String phoneNum) { do something... }}
調用方如下:
public class MessageListController { private static final Log LOGGER = new Log(MessageListController.class); @Autowired private IBlackAndWhiteListFeignClient blackAndWhiteListFeignClient; @RequestMapping(value = "/testBlackAndWhiteList", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public ResultData<String> testBlackAndWhiteList() { LOGGER.info("開始調用緩存接口"); ResultData<String> res = blackAndWhiteListFeignClient.blackAndWhiteList("asdqwezxxc", "B18037903086"); LOGGER.info("調用結果:" + res.getResultData()); return res; }
調用結果:
華麗麗的404了,很頭疼,經過各種度娘,發現導致這個問題有兩個原因,以下是解決方法:
二、問題分析
經過百度,說將SpringBoot配置文件里面 server.servlet.context-path
新聞熱點
疑難解答