• 微服务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();
    	}
    
    }
    
    
  • 相关阅读:
    分页的实现
    调取地图map
    meta标签应用,适应手机屏幕以及关键词、描述的添加
    页面中公共部分的统一调用
    PC端变成手机端的时候,把特效去掉(把canvas标签去掉)
    IIS上绑定域名,发布上线
    动态截取字符串获取当前网页的URL地址
    Vue 打包后报错 Uncaught TypeError: Cannot redefine property: $router
    Vue项目部署到线上页面空白
    让从后台返回的数据在让elementui 的el-select 显示对应的label值而不是value值
  • 原文地址:https://www.cnblogs.com/expiator/p/10566702.html
Copyright © 2020-2023  润新知