You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Camunda ExternalTaskClient绑定到本地自定义端口?

配置Camunda ExternalTaskClient使用自定义出站端口

Camunda ExternalTaskClient底层依赖OkHttp实现HTTP通信,默认会随机选取本地出站端口。要指定固定的自定义出站端口,需要通过配置自定义OkHttpClient并绑定本地端口来实现,具体步骤如下:

实现步骤与代码示例

  1. 自定义SocketFactory,绑定指定的本地端口
  2. 创建配置了该SocketFactory的OkHttpClient实例
  3. 将自定义OkHttpClient传入ExternalTaskClient的构建流程

修改后的完整代码如下:

import org.camunda.bpm.client.ExternalTaskClient;
import okhttp3.OkHttpClient;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import javax.net.SocketFactory;

public class CustomPortExternalTaskClient {
    public static void main(String[] args) {
        // 指定要使用的自定义出站端口
        int customLocalPort = 8888;

        // 自定义SocketFactory,绑定本地端口
        SocketFactory customSocketFactory = new SocketFactory() {
            @Override
            public Socket createSocket() {
                Socket socket = new Socket();
                try {
                    // 绑定本地端口
                    socket.bind(new InetSocketAddress(InetAddress.getLocalHost(), customLocalPort));
                } catch (Exception e) {
                    throw new RuntimeException("Failed to bind to custom local port", e);
                }
                return socket;
            }

            @Override
            public Socket createSocket(String host, int port) {
                throw new UnsupportedOperationException("Not implemented");
            }

            @Override
            public Socket createSocket(String host, int port, InetAddress localHost, int localPort) {
                throw new UnsupportedOperationException("Not implemented");
            }

            @Override
            public Socket createSocket(InetAddress host, int port) {
                throw new UnsupportedOperationException("Not implemented");
            }

            @Override
            public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) {
                throw new UnsupportedOperationException("Not implemented");
            }
        };

        // 创建配置了自定义SocketFactory的OkHttpClient
        OkHttpClient customOkHttpClient = new OkHttpClient.Builder()
                .socketFactory(customSocketFactory)
                .build();

        // 构建ExternalTaskClient并传入自定义OkHttpClient
        ExternalTaskClient client = ExternalTaskClient.create()
                .baseUrl("http://1.2.3.4:8080/engine-rest")
                .okHttpClient(customOkHttpClient)
                .build();

        // 订阅主题
        client.subscribe("my-topic")
                .handler(new MyHandler())
                .open();
    }
}

// 你的MyHandler实现类
class MyHandler implements org.camunda.bpm.client.task.ExternalTaskHandler {
    @Override
    public void execute(org.camunda.bpm.client.task.ExternalTask externalTask, org.camunda.bpm.client.task.ExternalTaskService externalTaskService) {
        // 处理任务逻辑
        externalTaskService.complete(externalTask);
    }
}

关键说明

  • 将customLocalPort的值修改为你需要的自定义出站端口
  • 自定义SocketFactory时,仅实现createSocket()方法即可满足ExternalTaskClient的通信需求,其他方法可抛出UnsupportedOperationException
  • 通过ExternalTaskClient.create().okHttpClient(customOkHttpClient)将自定义的HTTP客户端传入,覆盖默认客户端

内容的提问来源于stack exchange,提问作者asdqwessdfxcv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 15:27:21