zoukankan      html  css  js  c++  java
  • 微服务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
    4.检查是在哪个环境下操作:
    如果本地环境的程序没有关闭,就对部署在开发环境中的服务发起消费请求,可能会失败。

    示例如下:

    服务提供者,服务名为invoice,如下:

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

    服务熔断如下:

    /**
     *   断路由
     *
     */
    @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();
    	}
    
    }
    
    
  • 相关阅读:
    macbook 无声音解决方案
    webapck dev server代理请求 json截断问题
    百度卫星地图开启
    服务器 nginx配置 防止其他域名绑定自己的服务器
    记一次nginx php配置的心路历程
    遇到npm报错read ECONNRESET怎么办
    运行svn tortoiseSvn cleanup 命令失败的解决办法
    svn add 命令 递归目录下所有文件
    m4出现Please port gnulib freadahead.c to your platform! Look at the definition of fflush, fread, ungetc on your system, then report this to bug-gnulib."
    Ubuntu下安装GCC,mpc、mpfr、gmp
  • 原文地址:https://www.cnblogs.com/expiator/p/10566702.html
Copyright © 2011-2022 走看看