如何在Apache Camel中停止WebsocketComponent?

时间:2015-10-15 15:47:22

标签: scala jetty apache-camel akka

我正在编写的应用程序使用Apache Camel(camel-websocket组件)来创建Web Socket。

问题在于,如果我尝试停止Actor(即Akka Camel中的Producer),我无法在初始化期间停止作为组件创建的Jetty服务器。 我实际上尝试在我的actor的doStop()方法中调用postStop()方法,但它似乎不起作用:事实上,如果我尝试重新打开Web套接字,则所选端口已在使用中。< / p>

> FAILED org.eclipse.jetty.server.Server@41500094: java.net.BindException: Address already in use
java.net.BindException: Address already in use
    at sun.nio.ch.Net.bind0(Native Method) ~[na:1.7.0_80]
    at sun.nio.ch.Net.bind(Net.java:463) ~[na:1.7.0_80]
    at sun.nio.ch.Net.bind(Net.java:455) ~[na:1.7.0_80]
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) ~[na:1.7.0_80]
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) ~[na:1.7.0_80]

如果我尝试连接到WebSocket,实际上当我尝试停止生产者和相关的Jetty服务器时,我的连接不会丢失。

相反,如果我终止并重新启动整个应用程序,则第一次初始化将按预期工作。

我的制作人代码如下:

class HttpEndpointActor() extends Producer{

  val wsComponent: WebsocketComponent =  new WebsocketComponent()
  wsComponent.setHost("localhost")
  wsComponent.setPort(2222)

  this.camelContext.addComponent("ws", wsComponent)

  override def endpointUri: String = "ws://localhost:2222/test?sendToAll=true"

  override def postStop() = {
    super.postStop()
    this.camelContext.getComponent("ws", classOf[WebsocketComponent]).doStop()
    this.camelContext.removeComponent("ws")
  }
}

0 个答案:

没有答案