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

Cumulocity Java SDK微服务订阅连接异常求助

Cumulocity微服务启动后订阅服务连接失败问题解决

问题核心

微服务部署到Cumulocity平台后,未调用任何自定义API就触发IO异常,提示The server cumulocity failed to respond,栈追踪显示调用GET http://cumulocity:8111/application/currentApplication时出现Connection reset,MicroserviceSubscriptionsServiceImpl.subscribe方法反复重试仍失败。

排查与解决步骤

1. 验证内部服务网络连通性

  • 主机名解析检查:在微服务容器内执行ping cumulocity,确认能正常解析到Cumulocity内部服务的IP。若解析失败,需排查平台DNS配置或服务发现机制是否正常。
  • 端口连通性测试:使用telnet cumulocity 8111或nc -zv cumulocity 8111测试8111端口是否开放并可连接。若不通,说明网络策略(如Kubernetes Service/NetworkPolicy、Docker网络)阻止了流量,或Cumulocity内部服务未正常监听该端口。

2. 检查Cumulocity内部服务状态

8111端口对应Cumulocity的application-service,需确认该服务:

  • Pod/容器是否正常启动,无崩溃或重启记录
  • 服务日志中是否有启动失败、端口绑定失败等异常信息
  • 服务是否正确暴露8111端口(如Kubernetes Service的targetPort配置)

3. 核对微服务配置参数

  • 确认微服务的环境变量C8Y_BASEURL或配置文件中的内部服务地址是否正确,默认内部调用依赖cumulocity主机名指向平台内部服务。
  • 检查微服务使用的服务账号权限,确保拥有访问/application/currentApplication接口的权限(尽管连接重置更偏向网络问题,但权限异常也可能导致服务端主动断开连接)。

4. 调整HTTP客户端连接配置

针对连接重置问题,可尝试调整SDK的HTTP客户端参数:

  • 增加连接超时与读取超时时间
  • 启用TCP Keep-Alive机制,避免连接被中间网络设备主动断开
  • 调整重试策略的间隔时间,避免短时间内频繁重试导致服务端拒绝连接

相关日志与代码

完整栈追踪

2023-04-07 11:15:55.594 ERROR 11 --- [subscriptions-0] c.m.s.s.MicroserviceSubscriptionsService : Error while reacting on microservice subscription

com.cumulocity.sdk.client.SDKException: Error invoking GET http://cumulocity:8111/application/currentApplication
    at com.cumulocity.microservice.subscription.repository.impl.CurrentMicroserviceRepository.handleException(CurrentMicroserviceRepository.java:114)
    at com.cumulocity.microservice.subscription.repository.impl.CurrentMicroserviceRepository.getCurrentApplication(CurrentMicroserviceRepository.java:69)
    at com.cumulocity.microservice.subscription.repository.impl.CurrentMicroserviceRepository.register(CurrentMicroserviceRepository.java:46)
    at com.cumulocity.microservice.subscription.repository.impl.CurrentMicroserviceRepository.register(CurrentMicroserviceRepository.java:61)
    at com.cumulocity.microservice.subscription.repository.MicroserviceSubscriptionsRepository.register(MicroserviceSubscriptionsRepository.java:103)
    at com.cumulocity.microservice.subscription.service.impl.MicroserviceSubscriptionsServiceImpl.subscribe(MicroserviceSubscriptionsServiceImpl.java:113)
    at com.cumulocity.microservice.subscription.service.impl.MicroserviceSubscriptionScheduler$1.run(MicroserviceSubscriptionScheduler.java:66)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:750)
Caused by: com.sun.jersey.api.client.ClientHandlerException: java.net.SocketException: Connection reset
    at com.sun.jersey.client.apache.DefaultApacheHttpMethodExecutor.executeMethod(DefaultApacheHttpMethodExecutor.java:213)
    at com.sun.jersey.client.apache.ApacheHttpClientHandler.handle(ApacheHttpClientHandler.java:175)
    at com.cumulocity.sdk.client.CumulocityAuthenticationFilter.handle(CumulocityAuthenticationFilter.java:47)
    at com.sun.jersey.api.client.Client.handle(Client.java:648)
    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:670)
    at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
    at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:503)
    at com.cumulocity.sdk.client.RestConnector.getClientResponse(RestConnector.java:149)
    at com.cumulocity.sdk.client.RestConnector.get(RestConnector.java:123)
    at com.cumulocity.microservice.subscription.repository.application.CurrentApplicationApi.get(CurrentApplicationApi.java:22)
    at com.cumulocity.microservice.subscription.repository.impl.CurrentMicroserviceRepository.getCurrentApplication(CurrentMicroserviceRepository.java:67)
    ... 12 common frames omitted
Caused by: java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:210)
    at java.net.SocketInputStream.read(SocketInputStream.java:141)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:265)
    at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:78)
    at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:106)
    at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1116)
    at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.readLine(MultiThreadedHttpConnectionManager.java:1413)
    at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1973)
    at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1735)
    at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1098)
    at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
    at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
    at com.sun.jersey.client.apache.DefaultApacheHttpMethodExecutor.executeMethod(DefaultApacheHttpMethodExecutor.java:210)
    ... 22 common frames omitted

2023-04-07 11:23:26.437  INFO 11 --- [subscriptions-0] o.a.c.httpclient.HttpMethodDirector      : I/O exception (org.apache.commons.httpclient.NoHttpResponseException) caught when processing request: The server cumulocity failed to respond
2023-04-07 11:23:26.437  INFO 11 --- [subscriptions-0] o.a.c.httpclient.HttpMethodDirector      : Retrying request
2023-04-07 11:28:37.056  INFO 11 --- [subscriptions-0] o.a.c.httpclient.HttpMethodDirector      : I/O exception (org.apache.commons.httpclient.NoHttpResponseException) caught when processing request: The server cumulocity failed to respond
2023-04-07 11:28:37.056  INFO 11 --- [subscriptions-0] o.a.c.httpclient.HttpMethodDirector      : Retrying request
2023-04-07 11:41:18.465  INFO 11 --- [subscriptions-0] o.a.c.httpclient.HttpMethodDirector      : I/O exception (org.apache.commons.httpclient.NoHttpResponseException) caught when processing request: The server cumulocity failed to respond
2023-04-07 11:41:18.465  INFO 11 --- [subscriptions-0] o.a.c.httpclient.HttpMethodDirector      : Retrying request
2023-04-07 11:44:18.805  INFO 11 --- [subscriptions-0] o.a.c.httpclient.HttpMethodDirector      : I/O exception (org.apache.commons.httpclient.NoHttpResponseException) caught when processing request: The server cumulocity failed to respond
2023-04-07 11:44:18.805  INFO 11 --- [subscriptions-0] o.a.c.httpclient.HttpMethodDirector      : Retrying request
2023-04-07 11:47:49.211  INFO 11 --- [subscriptions-0] o.a.c.httpclient.HttpMethodDirector      : I/O exception (org.apache.commons.httpclient.NoHttpResponseException) caught when processing request: The server cumulocity failed to respond
2023-04-07 11:47:49.211  INFO 11 --- [subscriptions-0] o.a.c.httpclient.HttpMethodDirector      : Retrying request
2023-04-07 12:03:51.343  INFO 11 --- [subscriptions-0] o.a.c.httpclient.HttpMethodDirector      : I/O exception (org.apache.commons.httpclient.NoHttpResponseException) caught when processing request: The server cumulocity failed to respond
2023-04-07 12:03:51.343  INFO 11 --- [subscriptions-0] o.a.c.httpclient.HttpMethodDirector      : Retrying request
2023-04-07 12:12:32.323 ERROR 11 --- [subscriptions-0] c.m.s.s.MicroserviceSubscriptionsService : Error while reacting on microservice subscription

服务类自动装配代码

@Autowired
 private MicroserviceSubscriptionsService subscriptionsService;

SDK subscribe方法代码

public void subscribe() {
        synchronized(this.$lock) {
            try {
                this.subscribing = true;
                this.subscribingCredentials.clear();
                Optional<ApplicationRepresentation> maybeApplication = this.repository.register(this.properties.getApplicationName(), this.microserviceMetadataRepresentation);
                if (this.registeredSuccessfully = maybeApplication.isPresent()) {
                    final ApplicationRepresentation application = (ApplicationRepresentation)maybeApplication.get();
                    final MicroserviceSubscriptionsRepository.Subscriptions subscriptions = this.repository.retrieveSubscriptions(application.getId());
                    FluentIterable.from(subscriptions.getRemoved()).filter(new Predicate<MicroserviceCredentials>() {
                        public boolean apply(MicroserviceCredentials user) {
                            MicroserviceSubscriptionsServiceImpl.this.log("Remove subscription: {}", user);
                            Iterator var2 = MicroserviceSubscriptionsServiceImpl.this.listeners.iterator();

                            MicroserviceChangedListener listener;
                            do {
                                if (!var2.hasNext()) {
                                    return true;
                                }

                                listener = (MicroserviceChangedListener)var2.next();
                            } while(MicroserviceSubscriptionsServiceImpl.this.invokeRemoved(user, listener));

                            return false;
                        }
                    }).toList();
                    final ImmutableList<MicroserviceCredentials> successfullyAdded = FluentIterable.from(subscriptions.getAdded()).filter(new Predicate<MicroserviceCredentials>() {
                        public boolean apply(MicroserviceCredentials user) {
                            MicroserviceSubscriptionsServiceImpl.this.log("Add subscription: {}", user);
                            MicroserviceCredentials enhancedUser = MicroserviceCredentials.copyOf(user).appKey(application.getKey()).build();
                            MicroserviceSubscriptionsServiceImpl.this.subscribingCredentials.add(enhancedUser);
                            Iterator var3 = MicroserviceSubscriptionsServiceImpl.this.listeners.iterator();

                            MicroserviceChangedListener listener;
                            do {
                                if (!var3.hasNext()) {
                                    return true;
                                }

                                listener = (MicroserviceChangedListener)var3.next();
                            } while(MicroserviceSubscriptionsServiceImpl.this.invokeAdded(enhancedUser, listener));

                            MicroserviceSubscriptionsServiceImpl.this.subscribingCredentials.remove(enhancedUser);
                            return false;
                        }
                    }).toList();
                    this.repository.updateCurrentSubscriptions(FluentIterable.from(subscriptions.getAll()).filter(new Predicate<MicroserviceCredentials>() {
                        public boolean apply(MicroserviceCredentials user) {
                            return subscriptions.getAdded().contains(user) ? successfullyAdded.contains(user) : true;
                        }
                    }).toList());
                } else {
                    log.error("Application {} not found", this.properties.getApplicationName());
                }
            } catch (Throwable var11) {
                log.error("Error while reacting on microservice subscription", var11);
            } finally {
                this.subscribingCredentials.clear();
                this.subscribing = false;
            }

        }
    }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 23:18:09