如何使用camel jetty和camel websocket组件在同一端口上侦听不同的URI?

如何使用camel jetty和camel websocket组件在同一端口上侦听不同的URI?,websocket,jetty,apache-camel,Websocket,Jetty,Apache Camel,camel websocket组件使用Jetty创建web套接字服务器,使用URI,如: websocket://localhost:2080/replication 但我也希望使用camel jetty组件来侦听HTTP请求: jetty://http://localhost:2080/rest/ 当我尝试在Camel中配置时,我得到: java.net.BindException: Address already in use 如何配置我的路线,使Jetty可以同时执行这两项任务?如果

camel websocket组件使用Jetty创建web套接字服务器,使用URI,如:

websocket://localhost:2080/replication
但我也希望使用camel jetty组件来侦听HTTP请求:

jetty://http://localhost:2080/rest/
当我尝试在Camel中配置时,我得到:

java.net.BindException: Address already in use

如何配置我的路线,使Jetty可以同时执行这两项任务?

如果您使用的是基本路线配置,则您不能

camel websocket组件创建自己的内部Jetty服务器,该服务器侦听您在websocket URI中指定的端口。请看一下for WebsocketComponent,特别是在createServer()方法中

同样,如果查看camel jetty组件的,您将看到camel jetty组件还创建了一个jetty服务器。因此,当您在同一端口上使用两个Camel组件时,它们会以您记录的方式爆炸

这两个组件都不允许您传入对现有Jetty服务器实例的引用,这意味着您必须进行某种变通

最直接的选择是在Java应用程序前面使用最新版本的Apache作为反向代理,让两个不同的驼峰路由在不同的端口上侦听,Apache在单个端口上侦听,并根据URL将请求转发到相应的组件。有点老套,但很实用

更费力的选择是编写WebSocket处理程序,并将其注册到camel jetty组件上。Jetty的标题“Jetty处理程序和安全配置”中介绍了自定义处理程序的注册。然后可以使用Camel的bean绑定将消息路由到处理程序。这将实现WebSocket的目标,并在相同的IP和端口上休息,代价是重新发明camel WebSocket轮子