领先一步
VMware 提供培训和认证,以助您快速提升技能。
了解更多我们很高兴地宣布,我们已经发布了 Spring Cloud Square 孵化器项目的第一个公开可用的里程碑版本。该项目为 Spring Cloud LoadBalancer 提供了 OkHttpClient 和 Retrofit 集成,以及基于非阻塞 WebClient 的 Retrofit 客户端。Retrofit 是来自 Square 的一个声明式 HTTP 客户端。
您可以在下面找到有关如何开始使用该项目的更多信息。您还可以查看 项目仓库 和 项目文档。
通过自动配置创建的 OkHttpClient
中添加了一个应用程序拦截器。它从 Spring Cloud LoadBalancer 解析方案、主机和端口,并重写 URL。
要使用 SC LoadBalancer 来解析和选择要发送请求的实例,请将 spring-cloud-square-okhttp
依赖项添加到您的项目中
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-square-okhttp</artifactId>
<version>0.4.0-M1</version>
</dependency>
然后创建一个 @LoadBalanced
注解的 OkHttpClient.Builder
bean
@Configuration
class OkHttpClientConfig{
@Bean
@LoadBalanced
public OkHttpClient.Builder okHttpClientBuilder() {
return new OkHttpClient.Builder();
}
}
现在,您可以在请求中使用 serviceId
或虚拟主机名,而不是实际的 host:port
。SC LoadBalancer 通过选择一个可用的服务实例来解析它。
Request request = new Request.Builder()
.url("http://serviceId/hello").build();
Response response = builder.build().newCall(request).execute();
我们还使用负载均衡的 OkHttpClient
实例来运行 Retrofit 调用。
要将 Retrofit 与 Spring Cloud LoadBalancer 支持的 OkHttpClient
一起使用,请将 spring-cloud-square-retrofit
和 spring-cloud-square-okhttp
依赖项添加到您的项目中
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-square-retrofit</artifactId>
<version>0.4.0-M1</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-square-okhttp</artifactId>
<version>0.4.0-M1</version>
</dependency>
</dependencies>
使用 @EnableRetrofitClients
注解,让我们可以自动为您实例化和注入 Retrofit 客户端。然后创建一个 @LoadBalanced
注解的 OkHttpClient.Builder
bean 以在后台使用
@Configuration
@EnableRetrofitClients
class OkHttpClientConfig {
@Bean
@LoadBalanced
public OkHttpClient.Builder okHttpClientBuilder() {
return new OkHttpClient.Builder();
}
}
创建一个 Retrofit 客户端,并使用 @RetrofitClient
注解它,将服务的 serviceId
作为参数传递(您还可以使用该注解传递包含用户创建的 Retrofit 客户端拦截器的自定义配置)
@RetrofitClient("serviceId")
interface HelloClient {
@GET("/")
Call<String> hello();
}
确保使用 Retrofit 方法注解,例如 @GET("/")
。您现在可以注入 Retrofit 客户端并使用它来运行负载均衡调用(使用 serviceId
而不是实际的 host:port
)
class AService {
@Autowired
HelloClient client;
public String hello() throws IOException {
return client.hello().execute().body();
}
}
我们创建了一个 基于负载均衡 OkHttpClient 的 Retrofit 客户端的完整示例。
我们还使用适配器为 Retrofit 提供 WebClient 支持。
要将 Retrofit 与 Spring Cloud LoadBalancer 支持的 WebClient
一起使用,请将 spring-cloud-square-retrofit
和 spring-boot-starter-webflux
启动器依赖项添加到您的项目中
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-square-retrofit-webclient</artifactId>
<version>0.4.0-M1</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
</dependencies>
使用 @EnableRetrofitClients
注解,让我们可以自动为您实例化和注入 Retrofit 客户端。然后创建一个 @LoadBalanced
注解的 WebClient.Builder
bean 以在后台使用
@Configuration
@EnableRetrofitClients
class OkHttpClientConfig {
@Bean
@LoadBalanced
public WebClient.Builder webClientBuilder() {
return WebClient.builder();
}
}
创建一个 Retrofit 客户端,并使用 @RetrofitClient
注解它,将服务的 serviceId
作为参数传递
@RetrofitClient("serviceId")
interface HelloClient {
@GET("/")
Mono<String> hello();
}
确保使用 Retrofit 方法注解,例如 @GET("/")
。您现在可以注入 Retrofit 客户端并使用它来运行负载均衡调用(使用 serviceId
而不是实际的 host:port
)
class AService {
@Autowired
HelloClient client;
public Mono<String> hello() throws IOException {
return client.hello();
}
}
我们创建了一个 基于负载均衡 WebClient 的 Retrofit 客户端的完整示例。
由于当前可用的版本是里程碑版本,因此您需要将 Spring 里程碑存储库链接添加到您的项目中,才能运行本博文条目中提供的所有示例
<repositories>
<repository>
<id>spring-milestones</id>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
我们建议使用依赖管理来管理其他 Spring Cloud 依赖项
<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>