这可能是没有任何硬代码的微服务通信的最佳方式

Which could be the best way for communication of Micro-services without any HARD-CODE

我有一堆微服务,它们使用 RestTemplate 相互通信。微服务的所有通信都来自 API 网关。

我正在做如下,

    public List<ServiceInstance> serviceInstancesByApplicationName(String applicationName) {
            return this.discoveryClient.getInstances(applicationName);
        }

    //some Other logic 

    List<ServiceInstance> apigatewaymsInstanceList = discoveryClient.getInstances(apigatewaymsName);
            ServiceInstance apigatewaymsInstance = apigatewaymsInstanceList.get(0);

    //and

    restTemplate.exchange(apigatewaymsInstance.getUri().toString() + plmpayloadprocessmsResource, HttpMethod.POST,
                                entity, String.class);

但在这里它看起来像一个硬代码。我还缺少其他方法吗?最好的方法是什么?

同样,我想问是否有任何可用的方法,以便我可以将应用程序的名称和 eureka return 传递给我它的完整 URI,无需执行 applicationgetInstaceId(0);

尝试使用 Feign - 它是一个声明式 REST 客户端。它不需要您提到的任何样板。查看 spring-cloud-netflix 文档了解更多详情。简而言之,您的 REST 客户端将如下所示:

@FeignClient(name = "service-name", path = "/base-path")
public interface MyClient{

    @RequestMapping(method = RequestMethod.GET, value = "/greeting")
    String getGreeting();

}

调用 getGreeting 方法将导致向名为 service-name 和 url [=15] 的服务发送 GET 请求=]/base-path/greeting

您可以使用 EurekaClient#getNextServerFromEureka。您可能必须自己创建 URI,但这应该是微不足道的。

@Autowired
EurekaClient eurekaClient;


public void executeMethod()     {
    InstanceInfo loadBalancedInstance = eurekaClient.getNextServerFromEureka("myService", false);
    //do work
}