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了,下班走人

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐