Spring Cloud Square 介绍

我们很高兴地宣布,我们已经发布了Spring Cloud Square孵化器项目的第一个公开的里程碑版本。该项目为OkHttpClient和Retrofit提供了Spring Cloud LoadBalancer集成,以及非阻塞的WebClient支持的Retrofit客户端。Retrofit是Square的一个声明式HTTP客户端。

你可以在下面找到更多关于如何开始项目的信息。你也可以查看项目仓库项目文档

OkHttpClient Spring Cloud LoadBalancer集成

应用程序拦截器被添加到通过自动配置创建的 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-annotated 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和Spring Cloud LoadBalancer

我们还使用负载平衡的OkHttpClient实例来运行Retrofit调用。

要使用Retrofit与Spring Cloud LoadBalancer支持的OkHttpClient一起使用,请在下面添加
spring-cloud-square-retrofitspring-cloud-square-okhttp 依赖关系到你的项目。

<dependencies>
    <dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-square-retrofit</artifactId>
		<version>0.4.0-MILESTONE</version>
    </dependency>
    <dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-square-okhttp</artifactId>
		<version>0.4.0-MILESTONE</version>
    </dependency>
</dependencies><dependencies>
    <dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-square-retrofit</artifactId>
		<version>0.4.0-MILESTONE</version>
    </dependency>
    <dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-square-okhttp</artifactId>
		<version>0.4.0-MILESTONE</version>
    </dependency>
</dependencies>

使用@EnableRetrofitClients注解,让我们自动为你实例化和注入Retrofit客户端。然后创建一个@LoadBalanced注解的OkHttpClient.Builde.bean来在引擎下使用。

@Configuration
@EnableRetrofitClients
class OkHttpClientConfig {

@Bean
@LoadBalanced
public OkHttpClient.Builder okHttpClientBuilder() {
    return new OkHttpClient.Builder();
    }
}

创建一个Retrofit客户端,并用@RetrofitClient对其进行注解,传递你的服务的serviceId作为参数(你也可以使用注解传递一个自定义配置,该配置包含Retrofit客户端的用户自定义拦截器)。创建一个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客户端创建了一个完整的样本

使用WebClient和Spring Cloud LoadBalancer进行改造

我们还使用适配器为 Retrofit 提供 WebClient 支持。 要将 Retrofit 与 Spring Cloud LoadBalancer 支持的 WebClient 一起使用,请添加 spring-cloud-square-retrofitspring-boot-starter-webflux starter依赖关系到你的项目:

<dependencies>
    <dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-square-retrofit</artifactId>
		<version>0.4.0-MILESTONE</version>
    </dependency>
    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-webflux</artifactId>
    </dependency>
</dependencies>

使用 @EnableRetrofitClients注解,让我们自动为您实例化并注入 Retrofit 客户端。然后创建一个@LoadBalanced注解的WebClient.Builder bean,以便在下面使用:

@Configuration
@EnableRetrofitClients
class OkHttpClientConfig {

@Bean
@LoadBalanced
public WebClient.Builder okHttpClientBuilder() {
    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 String hello() throws IOException {
		return client.hello();
	}
}

我们为基于WebClient的负载均衡的Retrofit客户端创建了一个完整的样本

提示:

由于当前可用的版本是一个里程碑,因此对于本篇博文中介绍的所有示例,你需要将Spring Milestone仓库链接添加到你的项目中。

<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>

原文:Introducing Spring Cloud Square