无限循环与opcua服务器建立连接,无论客户端是否断开连接

问题描述 投票:0回答:1

如果我放入 OpcUaClientConfigBuilder 中的证书错误,则错误会无限出现,这会使 opcua 服务器上的流量变大。

一段时间后,连接数变得如此之大,导致成功连接的客户端由于服务器流量而无法收到数据。

错误是:

Failed to connect to OPC UA server.
2024-03-15 16:03:51.467  INFO 2300133 --- [nio-9002-exec-3] com.neos.opcua.service.OpcuaService      : Failed to connect to OPCUA server 
java.util.concurrent.ExecutionException: java.lang.RuntimeException: Failed to connect to OPC UA server.
2024-03-15 16:03:51.467  INFO 2300133 --- [nio-9002-exec-3] com.neos.opcua.service.OpcuaService      : Close connection
2024-03-15 16:03:51.467  INFO 2300133 --- [nio-9002-exec-3] com.neos.opcua.service.OpcuaService      : client org.eclipse.milo.opcua.sdk.client.OpcUaClient@469472c4
2024-03-15 16:03:51.467  INFO 2300133 --- [nio-9002-exec-3] com.neos.opcua.Handler.OpcuaHandler      : Client is disconnected.
2024-03-15 16:03:52.480 ERROR 2300133 --- [ty-event-loop-8] m.o.s.c.t.u.UascClientAcknowledgeHandler : [remote=/ip:port] Received error message: ErrorMessage{error=StatusCode{name=Bad_SecurityChecksFailed, value=0x80130000, quality=bad}, reason=[BadSecurityChecksFailed]}
2024-03-15 16:03:54.497 ERROR 2300133 --- [ty-event-loop-9] m.o.s.c.t.u.UascClientAcknowledgeHandler : [remote=/ip:port] Received error message: ErrorMessage{error=StatusCode{name=Bad_SecurityChecksFailed, value=0x80130000, quality=bad}, reason=[BadSecurityChecksFailed]}
2024-03-15 16:03:58.512 ERROR 2300133 --- [y-event-loop-10] m.o.s.c.t.u.UascClientAcknowledgeHandler : [remote=ip:port] Received error message: ErrorMessage{error=StatusCode{name=Bad_SecurityChecksFailed, value=0x80130000, quality=bad}, reason=[BadSecurityChecksFailed]}
2024-03-15 16:04:06.528 ERROR 2300133 --- [y-event-loop-11] m.o.s.c.t.u.UascClientAcknowledgeHandler : [remote=/ip:port] Received error message: ErrorMessage{error=StatusCode{name=Bad_SecurityChecksFailed, value=0x80130000, quality=bad}, reason=[BadSecurityChecksFailed]}
2024-03-15 16:04:22.543 ERROR 2300133 --- [y-event-loop-12] m.o.s.c.t.u.UascClientAcknowledgeHandler : [remote=/ip:port] Received error message: ErrorMessage{error=StatusCode{name=Bad_SecurityChecksFailed, value=0x80130000, quality=bad}, reason=[BadSecurityChecksFailed]}
2024-03-15 16:04:38.567 ERROR 2300133 --- [y-event-loop-13] m.o.s.c.t.u.UascClientAcknowledgeHandler : [remote=/ip:port] Received error message: ErrorMessage{error=StatusCode{name=Bad_SecurityChecksFailed, value=0x80130000, quality=bad}, reason=[BadSecurityChecksFailed]}
2024-03-15 16:04:54.582 ERROR 2300133 --- [y-event-loop-14] m.o.s.c.t.u.UascClientAcknowledgeHandler : [remote=/ip:port] Received error message: ErrorMessage{error=StatusCode{name=Bad_SecurityChecksFailed, value=0x80130000, quality=bad}, reason=[BadSecurityChecksFailed]}
2024-03-15 16:05:10.599 ERROR 2300133 --- [y-event-loop-15] m.o.s.c.t.u.UascClientAcknowledgeHandler : [remote=/ip:port] Received error message: ErrorMessage{error=StatusCode{name=Bad_SecurityChecksFailed, value=0x80130000, quality=bad}, reason=[BadSecurityChecksFailed]}
2024-03-15 16:05:26.613 ERROR 2300133 --- [ty-event-loop-0] m.o.s.c.t.u.UascClientAcknowledgeHandler : [remote=/ip:port] Received error message: ErrorMessage{error=StatusCode{name=Bad_SecurityChecksFailed, value=0x80130000, quality=bad}, reason=[BadSecurityChecksFailed]}
2024-03-15 16:05:42.647 ERROR 2300133 --- [ty-event-loop-1] m.o.s.c.t.u.UascClientAcknowledgeHandler : [remote=/ip:port] Received error message: ErrorMessage{error=StatusCode{name=Bad_SecurityChecksFailed, value=0x80130000, quality=bad}, reason=[BadSecurityChecksFailed]}
2024-03-15 16:05:58.661 ERROR 2300133 --- [ty-event-loop-2] m.o.s.c.t.u.UascClientAcknowledgeHandler : [remote=/ip:port] Received error message: ErrorMessage{error=StatusCode{name=Bad_SecurityChecksFailed, value=0x80130000, quality=bad}, reason=[BadSecurityChecksFailed]}
2024-03-15 16:06:14.676 ERROR 2300133 --- [ty-event-loop-3] m.o.s.c.t.u.UascClientAcknowledgeHandler : [remote=/ip:port] Received error message: ErrorMessage{error=StatusCode{name=Bad_SecurityChecksFailed, value=0x80130000, quality=bad}, reason=[BadSecurityChecksFailed]}
2024-03-15 16:06:30.689 ERROR 2300133 --- [ty-event-loop-4] m.o.s.c.t.u.UascClientAcknowledgeHandler : [remote=/ip:port] Received error message: ErrorMessage{error=StatusCode{name=Bad_SecurityChecksFailed, value=0x80130000, quality=bad}, reason=[BadSecurityChecksFailed]}
2024-03-15 16:06:46.703 ERROR 2300133 --- [ty-event-loop-5] m.o.s.c.t.u.UascClientAcknowledgeHandler : [remote=/ip:port] Received error message: ErrorMessage{error=StatusCode{name=Bad_SecurityChecksFailed, value=0x80130000, quality=bad}, reason=[BadSecurityChecksFailed]}```

For reference my code is this 

private static CompletableFuture createClient(字符串主机,整数端口,字符串用户名, 字符串密码、字符串 certPath、字符串 keyPath、字符串 applicationUri、字符串 securityPolicy) { // 创建网址 String url = String.format("opc.tcp://%s:%s", 主机, 端口);

    return DiscoveryClient.getEndpoints(url).thenCompose(endpoints -> {
        try {
            // fetch EndpointDescription
            EndpointDescription endpointDescription = findBest(endpoints);
            MessageSecurityMode messageSecurityMode = endpointDescription.getSecurityMode();
            // set security policy
            String securityPolicyUri = endpointDescription.getSecurityPolicyUri();
            UserTokenPolicy[] userTokenPolicies = endpointDescription.getUserIdentityTokens();
            if (securityPolicy != null) {
                securityPolicyUri = "http://opcfoundation.org/UA/SecurityPolicy#" + securityPolicy;
                for (int i = 0; i < userTokenPolicies.length; i++) {
                    UserTokenPolicy userTokenPolicy = userTokenPolicies[i];
                    userTokenPolicies[i] = new UserTokenPolicy(userTokenPolicy.getPolicyId(),
                            userTokenPolicy.getTokenType(), userTokenPolicy.getIssuedTokenType(),
                            userTokenPolicy.getIssuerEndpointUrl(), securityPolicyUri);
                }
            }

            // recreate EndpointDescription as returned EndpointDescription from server might not match the specifications
            EndpointDescription endpointDescriptionModified = new EndpointDescription(url,
                    endpointDescription.getServer(), endpointDescription.getServerCertificate(),
                    MessageSecurityMode.SignAndEncrypt, securityPolicyUri, userTokenPolicies,
                    endpointDescription.getTransportProfileUri(), endpointDescription.getSecurityLevel());

            // create OpcUaClientConfigBuilder
            OpcUaClientConfigBuilder cfg = new OpcUaClientConfigBuilder();

            // set end point
            cfg.setEndpoint(endpointDescriptionModified);

            // set user name and password
            if (username != null & (certPath == null || keyPath == null)) {
                cfg.setIdentityProvider(new UsernameProvider(username, password));
            }

            // set certificates
            if (certPath != null && keyPath != null) {
                X509IdentityProvider x509IdentityProvider = new X509IdentityProvider(certPath, keyPath);
                X509Certificate cert = x509IdentityProvider.getCertificate();
                KeyPair keyPair = new KeyPair(cert.getPublicKey(), x509IdentityProvider.getPrivateKey());
                if (username != null) {
                    cfg.setCertificate(cert).setKeyPair(keyPair).setIdentityProvider(x509IdentityProvider)
                            .setIdentityProvider(new UsernameProvider(username, password));
                } else {
                    cfg.setCertificate(cert).setKeyPair(keyPair).setIdentityProvider(x509IdentityProvider);
                }
            }

            // set ApplicationUri
            if (applicationUri != null) {
                cfg.setApplicationUri(applicationUri);
            }
            return CompletableFuture.completedFuture(OpcUaClient.create(cfg.build()));
        } catch (final UaException e) {
            CompletableFuture<OpcUaClient> failedFuture = new CompletableFuture<>();
            failedFuture.completeExceptionally(e);
            return failedFuture;
        }
    });
}




I am expecting if there is some property or something so that I can limit the retry of the connection the server. if OpcUaClientConfigBuilder has some properties. I explored the possible methods of that builder but unable to tackle that error.
threadpool opc-ua milo
1个回答
0
投票

客户端将自动尝试重新连接,直到您拨打

disconnect()

它会以指数方式放弃尝试,直到每约 16 秒尝试一次。这是不可配置的。

一段时间后,连接数变得如此之大,导致成功连接的客户端由于服务器流量而无法收到数据。

我不知道你想在这里说什么。

© www.soinside.com 2019 - 2024. All rights reserved.