一 介绍
默认使用HttpURLConnection连接HTTP服务
二 编写自定义客户端
1 增加依赖
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
2 实现Client接口
package org.crazyit.cloud;
import java.io.IOException;
import java.net.URI;
import java.util.Collection;
import java.util.HashMap;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import feign.Client;
import feign.Request;
import feign.Request.Options;
import feign.Response;
public class MyClient implements Client {
public Response execute(Request request, Options options)
throws IOException {
System.out.println("this is my client");
try {
// 创建一个默认的客户端
CloseableHttpClient httpclient = HttpClients.createDefault();
// 获取调用的HTTP方法
final String method = request.method();
// 创建一个HttpClient的HttpRequest
HttpRequestBase httpRequest = new HttpRequestBase() {
public String getMethod() {
return method;
}
};
// 设置请求地址
httpRequest.setURI(new URI(request.url()));
// 执行请求,获取响应
HttpResponse httpResponse = httpclient.execute(httpRequest);
// 获取响应的主体内容
byte[] body = EntityUtils.toByteArray(httpResponse.getEntity());
// 将HttpClient的响应对象转换为Feign的Response
Response response = Response.builder()
.body(body)
.headers(new HashMap<String, Collection<String>>())
.status(httpResponse.getStatusLine().getStatusCode())
.build();
return response;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
3 编写测试类
package org.crazyit.cloud;
import feign.Feign;
public class MyClientTest {
public static void main(String[] args) {
HelloClient client = Feign.builder()
.client(new MyClient())
.target(HelloClient.class,
"http://localhost:8080");
String result = client.hello();
System.out.println(result);
}
}
4 启动微服务
5 测试结果
this is my client
Hello World