Spring Cloud Service id not legal hostname (service_name)异常处理
这里写自定义目录标题Spring Cloud Service id not legal hostname (service_name)异常处理背景原因解决方案一解决方案二Spring Cloud Service id not legal hostname (service_name)异常处理背景今天在写Feign调微服务“serviceA”,发现该服务的服务名写成了“service_a”的格...
·
Spring Cloud Service id not legal hostname (service_name)异常处理
背景
今天在写Feign调微服务“serviceA”,发现该服务的服务名写成了“service_a”的格式,于是Feign的FeignClient 注解写成了
“@FeignClient(url = "${url}", value = "service_a")
”
然后启动服务,直接报错:
java.lang.IllegalStateException: Service id not legal hostname (service_a)
原因
Feign的服务名不能使用下划线,需使用短杠,即:“aa-bb”。
解决方案一
正确的服务名格式应该是使用短杠“-”,最简单的方法是修改serviceA的服务名。
但是这个服务已经是公司他们之前就已经写好了的服务,且正在使用,不能更改服务名,只能将错就错,但是任务要完成啊。只能另想方法来调用了。
解决方案二
思路: 将feign写成一个Service,然后使用Http协议去调用该服务,即可。
@Service
public class xxService {
@Autowired
private LoadBalancerClient loadBalancer;
//服务名称
private static final String SERVICE_NAME = "SERVICE_A";
@SuppressWarnings("unchecked")
public Resp<PropertyDetailDTO> queryDetailInfo(String orderId) {
ServiceInstance serviceInstance = loadBalancer.choose(SERVICE_NAME);
String url = "http://" + serviceInstance.getHost() + ":" + serviceInstance.getPort()
+ "/api/app/order/queryDetailInfo";
Map<String, Object> map = new HashMap<String, Object>();
map.put("orderId", orderId);
try {
Map<String, Object> resultMap = OkHttpUtils.httpClientGetReturnAsMap(url, map, 6000);
return MapperUtils.mapToBean(resultMap, Resp.class);
} catch (Exception e) {
log.error("queryDetailInfo has error.", e);
return Resp.fail(ErrorCode.SYSTEM_ERROR);
}
}
···
}
这就搞定了,好久没写blog了,下班走人
更多推荐
已为社区贡献1条内容
所有评论(0)