微服務SpringCloud沒法進行服務消費

最近用SpringCloud作微服務,一直沒法成功進行服務消費。
我使用的服務消費者是Feign,聲明式調用服務提供者。spring

排查過程

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
4.檢查是在哪一個環境下操做:
若是本地環境的程序沒有關閉,就對部署在開發環境中的服務發起消費請求,可能會失敗。app

示例以下:

服務提供者,服務名爲invoice,以下:ide

@Controller
public class InvoiceMsgController extends BaseController{
       private static final Logger logger=LoggerFactory.getLogger(InvoiceMsgController.class);
    @Autowired
    private SendMsgService sendMsgService;
     /**
          * 服務提供者的方法
          */
    @RequestMapping(value = "/sentMsg", method = RequestMethod.POST )
    public void sentMsgToWeChat(HttpServletRequest request) throws Exception {
        
        // 從請求中獲取sendJson等其餘邏輯忽略
        sendMsgService.SendWechatMessage(sendJson);
        logger.info("==============>成功推送我的號消息。");
    
    }

}

服務提供者的yml配置文件:微服務

server:
  port: 10010
  context-path: /dev

spring:
  application:
    name: invoice

服務消費者Feign,調用的服務提供者名稱爲invoice,以下:測試

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

   /**
     *  調用服務提供者中的方法。
     *  注意:此處的/dev 是invoice服務的上下文,相關的properties配置爲: server.context-path=/dev。若是服務提供者有上下文,就要加在Feign的value裏面。沒有則不加。
     */
    @RequestMapping(value = "/dev/sentMsg", method = RequestMethod.POST)
    JSONObject sentMsgToWeChat(JSONObject invoiceJson) ;
}

服務熔斷以下:url

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

    private JSONObject createObject(){
        JSONObject object=new JSONObject();
        object.put("errcode", "0001");
        object.put("description", "發送消息失敗");
        return object;
    }
    
    @Override
    public JSONObject sentMsgToWeChat(JSONObject request) {
        // TODO Auto-generated method stub
        return createObject();
    }

}
相關文章
相關標籤/搜索