微服务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{
      
	@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: /my

spring:
  application:
    name: invoice

服务消费者Feign,调用的服务提供者名称为invoice,如下:

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

   /**
     *  调用服务提供者中的方法。
     *  注意:此处的/my 是invoice服务的上下文,相关的properties配置为: server.context-path=/my 。如果服务提供者有上下文,就要加在Feign的value里面。没有则不加。
     */
	@RequestMapping(value = "/my/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();
	}

}

posted on   乐之者v  阅读(333)  评论(0编辑  收藏  举报

努力加载评论中...

导航

点击右上角即可分享
微信分享提示