这可能是没有任何硬代码的微服务通信的最佳方式
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
}
我有一堆微服务,它们使用 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
}