我找了类似的问题,却找不到任何问题。我有一个使用drop-wizard创建的微服务,该服务在localhost:9000中运行。
我正在8080中运行另一个项目(使用spring mvc)。我想调用上面的服务,它从主项目中的任何控制器返回字符串.lets说路径是" localhost: 9000 / giveMeString"
答案 0 :(得分:5)
您可以使用Apache的HTTP客户端。从他们的文档中借用这个例子:
// Create an instance of HttpClient.
HttpClient client = new HttpClient();
// Create a method instance.
GetMethod method = new GetMethod("http://localhost:9000/giveMeString");
// Execute the method.
int statusCode = client.executeMethod(method);
// Read the response body.
byte[] responseBody = method.getResponseBody();
//Print the response
System.out.println(new String(responseBody));
答案 1 :(得分:4)
如果您真的要走微服务路径,请注意为每个请求创建一个HTTP客户端并使同步阻塞请求无法真正扩展。
以下是一些想法,如果你使用Spring:
您可以创建single RestTemplate instance并将其注入应用程序的多个位置。
@Configuration
public class MyConfiguration {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate(new HttpComponentsClientHttpRequestFactory());
}
}
您可以使用AsyncRestTemplate;非常有用,特别是如果您的控制器需要发出多个请求,并且您不想阻止您的webapp线程。您的控制器甚至可以返回DeferredResult
或ListenableFuture
,这将使您的网络应用程序更具可扩展性。
您还可以查看Spring Cloud和Spring Cloud Netflix。 您将看到有趣的功能:负载平衡,恢复,断路器等。