在使用Spring Cloud時,要注意:服務名不能以http開頭,下面是spring-cloud-netflix-core-1.4.x中的代碼:spring
package org.springframework.cloud.netflix.feign; class FeignClientFactoryBean implements FactoryBean<Object>, InitializingBean, ApplicationContextAware { [@Override](https://my.oschina.net/u/1162528) public Object getObject() throws Exception { FeignContext context = applicationContext.getBean(FeignContext.class); Feign.Builder builder = feign(context); if (!StringUtils.hasText(this.url)) { String url; // 這塊應該改爲 if (!(this.name.startsWith("http://") || this.name.startsWith("https://"))) { if (!this.name.startsWith("http")) { url = "http://" + this.name; } else { url = this.name; } url += cleanPath(); return loadBalance(builder, context, new HardCodedTarget<>(this.type, this.name, url)); } if (StringUtils.hasText(this.url) && !this.url.startsWith("http")) { this.url = "http://" + this.url; } String url = this.url + cleanPath(); Client client = getOptional(context, Client.class); if (client != null) { if (client instanceof LoadBalancerFeignClient) { // not lod balancing because we have a url, // but ribbon is on the classpath, so unwrap client = ((LoadBalancerFeignClient)client).getDelegate(); } builder.client(client); } Targeter targeter = get(context, Targeter.class); return targeter.target(this, builder, context, new HardCodedTarget<>( this.type, this.name, url)); } }