DashScope Java SDK 连接池配置

更新时间:2025-03-17 02:33:32

在调用大模型服务时,高并发场景下可能会出现请求超时、资源消耗大等问题。为解决这些问题,您可以调整连接池配置,优化连接复用情况。

连接池

在高并发场景下,频繁地创建和销毁网络连接会导致显著的性能开销。为了解决此问题,DashScope Java SDK 默认启用了连接池机制,通过复用已有的连接来减少资源消耗,提高请求处理效率。

建议您根据具体业务合理调整连接池的连接数和超时时间,优化连接复用情况。相关配置参数及说明如下:

参数

含义

默认值

单位

备注

参数

含义

默认值

单位

备注

connectTimeout

建立连接的超时时间。

120

在低延迟场景中,通常需要设置较短的连接超时时间,以减少等待时间,提高响应速度。

readTimeout

读取数据的超时时间。

300

writeTimeout

写入数据的超时时间。

60

connectionIdleTimeout

连接池中空闲连接的超时时间。

300

在高并发场景下,适当延长空闲连接超时时间,有利于避免频繁创建连接,从而降低资源消耗。

connectionPoolSize

连接池中的最大连接数。

32

在高并发场景下:

  • 连接数过低时,可能导致请求阻塞或超时,或者频繁创建连接,增加资源消耗;

  • 连接数过高时,可能导致服务端负载过大。

建议根据业务需求调整配置。

maximumAsyncRequests

最大并发请求数。全局的并发请求数限制(包含所有主机)。需要小于或等于最大连接数,否则可能出现请求阻塞的情况。

32

maximumAsyncRequestsPerHost

单台主机的最大并发请求数。需要小于或等于最大并发请求数。

32

请求示例

安装模型调用SDK

如果您的环境中已安装Java,请安装DashScope Java SDK。SDK的版本请参考:DashScope Java SDK。执行以下命令来添加 Java SDK 依赖,并将 the-latest-version 替换为最新的版本号。

XML
Gradle
  1. 打开您的Maven项目的pom.xml文件。

  2. <dependencies>标签内添加以下依赖信息。

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>dashscope-sdk-java</artifactId>
        <!-- 请将 'the-latest-version' 替换为最新版本号:https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java -->
        <version>the-latest-version</version>
    </dependency>
  3. 保存pom.xml文件。

  4. 使用Maven命令(如mvn compilemvn clean install)来更新项目依赖,这样Maven会自动下载并添加DashScope Java SDK到您的项目中。

WindowsIDEA集成开发环境为例:

image

  1. 打开您的Gradle项目的build.gradle文件。

  2. dependencies块内添加以下依赖信息。

    dependencies {
        // 请将 'the-latest-version' 替换为最新版本号:https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java
        implementation group: 'com.alibaba', name: 'dashscope-sdk-java', version: 'the-latest-version'
    }
  3. 保存build.gradle文件。

  4. 在命令行中,切换到您的项目根目录,执行以下Gradle命令来更新项目依赖。这将会自动下载并添加DashScope Java SDK到您的项目中。

    ./gradlew build --refresh-dependencies

WindowsIDEA集成开发环境为例:

image

以下代码示例展示了如何配置连接池相关参数(如超时时间、最大连接数等),并调用大模型服务。您可以根据实际需求调整相关参数,以优化并发性能和资源利用率。

// 建议DashScope SDK的版本 >= 2.12.0
import java.time.Duration;
import java.util.Arrays;

import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationParam;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.common.Message;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.protocol.ConnectionConfigurations;
import com.alibaba.dashscope.utils.Constants;
import com.alibaba.dashscope.utils.JsonUtils;

public class Main {
    public static GenerationResult callWithMessage() throws ApiException, NoApiKeyException, InputRequiredException {
        Generation gen = new Generation();
        Message systemMsg = Message.builder()
                .role(Role.SYSTEM.getValue())
                .content("You are a helpful assistant.")
                .build();
        Message userMsg = Message.builder()
                .role(Role.USER.getValue())
                .content("你是谁?")
                .build();
        GenerationParam param = GenerationParam.builder()
                // 若没有配置环境变量,请用百炼API Key将下行替换为:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                // 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
                .model("qwen-plus")
                .messages(Arrays.asList(systemMsg, userMsg))
                .resultFormat(GenerationParam.ResultFormat.MESSAGE)
                .build();
        
        System.out.println(userMsg.getContent());
        return gen.call(param);
    }
    public static void main(String[] args) {
        // 连接池配置
        Constants.connectionConfigurations = ConnectionConfigurations.builder()
        .connectTimeout(Duration.ofSeconds(10))  // 建立连接的超时时间, 默认 120s
        .readTimeout(Duration.ofSeconds(300)) // 读取数据的超时时间, 默认 300s
        .writeTimeout(Duration.ofSeconds(60)) // 写入数据的超时时间, 默认 60s
        .connectionIdleTimeout(Duration.ofSeconds(300)) // 连接池中空闲连接的超时时间, 默认 300s
        .connectionPoolSize(256) // 连接池中的最大连接数, 默认 32
        .maximumAsyncRequests(256)  // 最大并发请求数, 默认 32
        .maximumAsyncRequestsPerHost(256) // 单个主机的最大并发请求数, 默认 32
        .build();

        try {
            GenerationResult result = callWithMessage();
            System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent());
        } catch (ApiException | NoApiKeyException | InputRequiredException e) {
            // 使用日志框架记录异常信息
            System.err.println("An error occurred while calling the generation service: " + e.getMessage());
        }
        System.exit(0);
    }
}

错误码

如果模型调用失败并返回报错信息,请参见错误信息进行解决。

  • 本页导读 (1)
  • 连接池
  • 请求示例
  • 安装模型调用SDK
  • 错误码