问题描述:调用微服务: 微服务间部署再Nacos的同一个命名空间;

在启动该服务时,报错信息如下:


java.lang.IllegalStateException: Service id not legal hostname (/tope-pay-server/padAccount)
	at org.springframework.util.Assert.state(Assert.java:73) ~[spring-core-5.2.4.RELEASE.jar:5.2.4.RELEASE]
	at org.springframework.cloud.openfeign.FeignClientsRegistrar.getName(FeignClientsRegistrar.java:103) ~[spring-cloud-openfeign-core-2.2.2.RELEASE.jar:2.2.2.RELEASE]
	at org.springframework.cloud.openfeign.FeignClientsRegistrar.getName(FeignClientsRegistrar.java:278) ~[spring-cloud-openfeign-core-2.2.2.RELEASE.jar:2.2.2.RELEASE]
	at org.springframework.cloud.openfeign.FeignClientsRegistrar.registerFeignClient(FeignClientsRegistrar.java:233) ~[spring-cloud-openfeign-core-2.2.2.RELEASE.jar:2.2.2.RELEASE]
	at org.springframework.cloud.openfeign.FeignClientsRegistrar.registerFeignClients(FeignClientsRegistrar.java:219) ~[spring-cloud-openfeign-core-2.2.2.RELEASE.jar:2.2.2.RELEASE]
	at org.springframework.cloud.openfeign.FeignClientsRegistrar.registerBeanDefinitions(FeignClientsRegistrar.java:144) ~[spring-cloud-openfeign-core-2.2.2.RELEASE.jar:2.2.2.RELEASE]
	at org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java:86) ~[spring-context-5.2.4.RELEASE.jar:5.2.4.RELEASE]
	at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:385) ~[spring-context-5.2.4.RELEASE.jar:5.2.4.RELEASE]
	at java.util.LinkedHashMap.forEach(LinkedHashMap.java:684) ~[na:1.8.0_151]
	at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:384) ~[spring-context-5.2.4.RELEASE.jar:5.2.4.RELEASE]

 报错信息明细:描述Service id 非法,不支持:排查返现 ,PayWebConst.PAY_SERVER 常量多加了一个了反斜杠"/",去掉后正常运行;

PayWebConst配置类如下:

/**
 * 支付中心管理后台API常量定义
 * @author yh
 * @since 2021-03-15 15:00:00
 * @version 1.0
 *
 */
public class PayWebConst {
	
	private PayWebConst() {
	}
	
	/** 支付系统服务名 */
	public static final String PAY_SERVER = "/tope-pay-server";
}

引出的问题: 微服务Feign调用间的@FeignClient 调用的两种配置:

(1)方法路径的配置一;这种配置原则为当互访的微服务间不在同一个命名空间时,通过网关url地址方式,此时配置路径

/**
 * 订单推送重发服务
 * 
 * @author yangh
 * @since 2021-04-19 10:13:00
 * @version 1.0
 */
@FeignClient(name="feignPushOrderService", url = "${feign_api_url.internalGatewayUrl}" + PayWebConst.PAY_SERVER + "/pushOrder", fallbackFactory = FeignPushOrderServiceFallbackFactory.class)
public interface FeignPushOrderService {
 }

(2) 当微服务在同一个命名空间注册时,可以使用下面的配置方式:


/**
 * 订单推送重发服务
 * 
 * @author yangh
 * @since 2021-04-19 10:13:00
 * @version 1.0
 */
@FeignClient(contextId="feignPushOrderService", value = PayWebConst.PAY_SERVER + "/pushOrder", fallbackFactory = FeignPushOrderServiceFallbackFactory.class)
public interface FeignPushOrderService {


	/**
	 * 消息重发
	 * @param pushOrderId  推送记录ID
	 * @param from         权限标识
	 */
	@PostMapping("/reSendMsg")
	PayResult<String> reSendMessage(@RequestParam("pushOrderId") String pushOrderId, @RequestHeader(SecurityConstants.FROM) String from);
}

                    

Logo

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

更多推荐