Apache HttpClient 调用服务
添加依赖
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
注入
@Configuration
public class HttpClientConfig {
@Autowired
private RestTemplateBuilder templateBuilder;
@Bean
public RestTemplate restTemplate(){
return templateBuilder.build();
}
}
Ribbon 负载均衡
依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
注入
@Configuration
public class HttpClientConfig {
@Autowired
private RestTemplateBuilder templateBuilder;
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return templateBuilder.build();
}
}
接口调用的时候,框架内部会将服务名称替换成具体的服务 IP 信息,然后进行调用
Feign 声明式服务客户端
依赖
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR5</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
或者
<!--
使用这个依赖不用导入spring cloud
启动类添加的注解@EnableFeignClients
效果和上边的应该和上边的相同,但是没有去测试
-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>RELEASE</version>
</dependency>
启动类加注解
@SpringBootApplication
@EnableFeignClients
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
使用
@FeignClient(value = "eureka-client-user-service")
public interface UserRemoteClient {
@GetMapping("/user/hello")
String hello();
}
输出日志
自定义日志输出配置
@Configuration
public class FeignConfiguration {
/**
* 日志级别
*
* @return
*/
@Bean
Logger.Level feignLoggerLevel() {
//NONE:不输出日志。
//BASIC:只输出请求方法的 URL 和响应的状态码以及接口执行的时间。
//HEADERS:将 BASIC 信息和请求头信息输出。
//FULL:输出完整的请求信息。
return Logger.Level.FULL;
}
/**
*Basic 认证,也可以自定义请求拦截器实现RequestInterceptor接口
*/
@Bean
public BasicAuthRequestInterceptor basicAuthRequestInterceptor() {
return new BasicAuthRequestInterceptor("user", "password");
}
}
@FeignClient(value = "eureka-client-user-service", configuration = FeignConfiguration. class)
public interface UserRemoteClient {
// ...
}
在配置中定义日志出级别
# logging.level.client 类地址=级别,例如
logging.level.com.example.demo.UserRemoteClient = DEBUG
在调用的时候会打印对应级别的日志,且会进行Basic认证