微服务SpringCloud无法进行服务消费

Posted 乐之者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微服务SpringCloud无法进行服务消费相关的知识,希望对你有一定的参考价值。

最近用SpringCloud做微服务,一直无法成功进行服务消费。
我使用的服务消费者是Feign,声明式调用服务提供者。

排查过程

1.检查服务提供者:
(1)对提供的方法进行测试,确保提供的服务没有问题。
(2)是否在控制层上方添加了@Controller。
(3)方法的method是否正确。是GET还是POST。
2.仔细检查服务消费者:
(1)服务名value是否正确。服务名不一定是项目名,要检查服务提供者的application配置文件,对应的spring.application.name属性,也可以直接打开注册中心查看服务名。
(2)是否存在上下文。要检查服务提供者的application配置文件,是否有 context-path 属性。如果存在上下文属性,要加到方法参数value的前面 。
(3)方法的method是否正确。是GET还是POST。
(4)方法的url是否正确。对应服务提供者的url。
3.检查断路由Hystrix:
(1)在类的上方是否加了@Component
(2)是否添加了@HystrixCommond

示例如下:

服务消费者Feign如下:

@FeignClient(value="smkp",fallback=InvoiceMsgHystrix.class)
public interface InvoiceMsgService {

   /**
     *  服务提供者。
     *  注意:此处的/test是smkp服务的上下文,相关的yml配置为: context-path: /test
     */
    @RequestMapping(value = "/test/smkp/sentMsg", method = RequestMethod.POST)
    public JSONObject sentMsgToWeChat(JSONObject invoiceJson) ;
}

服务熔断如下:

/**
 *   断路由
 *
 */
@Component
public class InvoiceMsgHystrix implements InvoiceMsgService{

    private JSONObject createObject(){
        JSONObject object=new JSONObject();
        object.put("errcode", ErrorType.INVOICE_SCAN_CODE_SENT_MSG_IS_FAIL.getCode());
        object.put("description", ErrorType.INVOICE_SCAN_CODE_SENT_MSG_IS_FAIL.getMsg());
        return object;
    }
    
    @Override
    public JSONObject sentMsgToWeChat(JSONObject request) {
        // TODO Auto-generated method stub
        return createObject();
    }

}

服务提供者如下:

@Controller
public class InvoiceMsgController extends BaseController{
       private static final Logger logger=LoggerFactory.getLogger(InvoiceMsgController.class);
    @Autowired
    private SendMsgService sendMsgService;
     /**
          * 服务提供者的方法
          */
    @ResponseBody
    @RequestMapping(value = "/smkp/sentMsg", method = RequestMethod.POST )
    public JSONObject sentMsgToWeChat(HttpServletRequest request) throws Exception {
        
        // 其他逻辑忽略
        sendMsgService.SendWechatMessage(sendJson);
        logger.info("==============>成功推送个人号消息。");
        JSONObject data = new JSONObject();
        data.put(ResultCode.H_CODE, ResultCode.DEAL_SUCCESS);
        data.put(ResultCode.H_DESCRIPTION, ResultInfo.DEAL_SUCCESS_CN);
        data.put("serial_no", serialNo);
        return data;
    }

}

以上是关于微服务SpringCloud无法进行服务消费的主要内容,如果未能解决你的问题,请参考以下文章

基于springcloud的微服务实战

基于springcloud的微服务实战

SpringCloud01——服务的注册和发现

springCloud:微服务的注册与发现(Eureka)

SpringCloud微服务云架构构建B2B2C电子商务平台之-Eureka服务消费Feign

springCloud(11):使用Hystrix实现微服务的容错处理-简介与实现