java - apache骆驼码头websocket java.net.BindException
问题描述
我尝试将 websocket 与Apache Camel Jetty Websocket 组件连接
Websocket 的 url 是:wss://echo.websocket.org
我被这个错误困住了:
org.apache.camel.RuntimeCamelException: MultiException[java.io.IOException: Failed to bind to echo.websocket.org/174.129.224.73:443, java.io.IOException: Failed to bind to echo.websocket.org/174.129.224.73:443]
我还没有真正理解他如何在 ws 和 wss 之间进行选择,我尝试放置一个自签名的 sslContextParameters/
这是我的代码:
@Configuration
public class EipConfiguration extends RouteBuilder {
@Override
public void configure() {
CamelContext context = new DefaultCamelContext();
String server = "echo.websocket.org";
int port = 443;
String uri = "websocket://"+server+":"+port+"/?sslContextParameters=#sslContextParameters";
from(uri)
.log(">>> Message received from WebSocket Client : ${body}");
}
@Bean(name = "sslContextParameters")
public SSLContextParameters sslContextParameters() throws Exception {
TrustManagersParameters trustManagersParameters = new TrustManagersParameters();
X509ExtendedTrustManager extendedTrustManager = new InsecureX509TrustManager();
trustManagersParameters.setTrustManager(extendedTrustManager);
SSLContextParameters sslContextParameters = new SSLContextParameters();
sslContextParameters.setTrustManagers(trustManagersParameters);
return sslContextParameters;
}
}
InsecureX509TrustManager
public class InsecureX509TrustManager extends X509ExtendedTrustManager {
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s, Socket socket) throws CertificateException {
//Do nothing
}
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s, Socket socket) throws CertificateException {
//Do nothing
}
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s, SSLEngine sslEngine) throws CertificateException {
//Do nothing
}
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s, SSLEngine sslEngine) throws CertificateException {
//Do nothing
}
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
//Do nothing
}
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
//Do nothing
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}
解决方案
Jetty WebSocket Component (and Atmosphere WebSocket component) is intended to expose new WebSocket server. If you need to connect as client to remote WebSocket server, you should use AHC Websocket component
The AHC-WS component provides Websocket based endpoints for a client communicating with external servers over Websocket (as a client opening a websocket connection to an external server).
推荐阅读
- mysql - 如何修复 Laravel AJAX 请求不起作用
- javascript - 在 Alfresco Share 中的 bundle service *.post.js 文件中,companyhome 未定义错误
- r - 计算一段时间后的累积和
- javascript - 如何配置 Vue-CLI 3 以生成没有 JavaScript 的页面?
- python - 具有多个条件和检索值的 Pandas df.loc 索引
- sql - 是否可以基于另一个表生成列?
- python - 为什么 Python 在列表理解中不排除错误
- php - 尝试在 null 上读取属性“total_product_quantity”
- mongodb - Mongo DB 存档无法从 ec2 与 vpc 对等互连
- django - 无法解析相关模型。姜戈,左塞尔