Spring Cloud Service id not legal hostname (service_name)异常处理

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

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值