• SpringCloud Feign 踩到的坑(一)


    最近在使用SpringCloud的context-path时,遇到了一些坑,记录一下。

    server.context-path(上下文)

    服务提供者的application配置文件中有一个属性叫server.context-path,是上下文。
    如下示:

    server.context-path=/dev
    

    如果没有上下文,我们访问一个接口的路径可能是:
    localhost:8080/user/
    如果有上下文dev,那么这个url必须写成:
    localhost:8080/dev/user/
    也就是说:
    服务消费者对服务提供者的方法进行访问时,url也要加上context-path上下文。

    服务消费者Feign

    我这边项目使用的是Feign进行服务消费,将context-path加在了方法的value里面。
    如下:

    @FeignClient(value="user",fallback=UserMsgHystrix.class)
    public interface UserMsgService {
    
       /**
         * 推送消息
         * 注意:此处的dev 是服务提供者的上下文
         */
    	@RequestMapping(value = "/dev/sentMsg", method = RequestMethod.POST)
    	public JSONObject sentMsgToWeChat(JSONObject invoiceJson) ;
    }
    
    

    多个环境的context-path

    如果只有一个本地环境,那么采用上面的做法就解决了。
    但是在实际开发中,往往有多个环境。比如本地环境,开发环境,测试环境,正式环境。
    而不同的环境又有不同的上下文,比如开发环境上下文设为/dev,测试环境上下文设为/test。
    不同环境的上下文,可以使用@FeignClient的path属性,读取properties文件的值。
    查看@FeignClient的源码,可以看到path的注释:

    	/**
    	 * Path prefix to be used by all method-level mappings. Can be used with or without
    	 */
    	String path() default "";
    

    意思就是:path可以给方法的url添加前缀

    在服务消费者的开发环境properties文件中,加入:

    providerContext=dev
    

    在服务消费者的测试环境properties文件中,加入:

    providerContext=test
    

    在服务消费者的正式环境properties文件中,加入:

    providerContext=/
    

    Feign服务消费的代码如下示:

    @FeignClient(value="user",fallback=UserMsgHystrix.class)
    public interface UserMsgService {
    	@RequestMapping(value = "sentMsg",path="${providerContext}", method = RequestMethod.POST)
    	public JSONObject sentMsgToWeChat(JSONObject invoiceJson) ;
    }
    
  • 相关阅读:
    fastdfs部署及官网
    fasrdfs在spring cloud中的使用
    面包屑的查询
    SpringCloud中使用ES使用课程上下线
    Redis中在项目中的使用
    树结构Tree查询
    平凡的世界 田晓霞的日记 摘抄

    英语积累
    英语学习第四天
  • 原文地址:https://www.cnblogs.com/expiator/p/10581969.html
Copyright © 2020-2023  润新知