【问题标题】:Camel REST DSL - Address already in use: bind ExceptionCamel REST DSL - 地址已在使用中:绑定异常
【发布时间】:2018-04-12 13:41:05
【问题描述】:

我在我的项目中使用 REST DSL 组件和 Jboss Fuse Karaf 6.3 实例。我有两个问题

  1. 使用 restConfiguration,我必须始终指定一个端口号。尝试将组件作为“servlet”,仍然必须提供端口号。有没有办法避免这种情况?请注意,我不是在这里创建网络项目。

  2. 一个 Bundle 在端口 8080 上使用“restlet”组件公开其余端点,这可以正常工作。另一个 Bundle 尝试使用相同的 restConfiguration 公开几个端点。由于以下异常,现在此捆绑包尚未启动

    引起:java.net.BindException:地址已在使用:绑定 在 sun.nio.ch.Net.bind0(Native Method)[:1.8.0_111]

我在两个捆绑包中都使用如下所示的 Spring DSL,一个带有绑定关闭,一个带有 json。

捆绑1

    <restConfiguration bindingMode="json" component="restlet" port="8080"/>
    <rest path="HelloService/rs">

捆绑包2

    <restConfiguration bindingMode="off" component="restlet" port="8080"/>
    <rest path="AnotherService/rs">

请问有什么解决方案或建议吗?

【问题讨论】:

    标签: apache-camel osgi apache-karaf jbossfuse


    【解决方案1】:

    您不能在 karaf/jboss fuse 中使用多个捆绑包,在使用 restlet、jetty 等时。您只能在使用 servlet 时重新使用同一个端口,因为您正在使用共享的 http 服务/servlet JBoss Fuse 开箱即用。

    所以你应该这样做

     <restConfiguration bindingMode="off" component="servlet"/>
    

    如果您将 swagger api-docs 与 camel-swagger-java 一起使用,则使用 servlet 时的端口号仅用于文档目的。

    【讨论】:

      【解决方案2】:

      非常感谢克劳斯。

      我能够让它与“servlet”组件一起工作,但下面提到的其他更改很少

      1. 将 CamelHttpTransportServlet 发布为 Osgi 服务
      <osgi:reference id="anHttpService" interface="org.osgi.service.http.HttpService" />
      
      <bean class="org.apache.camel.component.servlet.osgi.OsgiServletRegisterer"
          init-method="register" destroy-method="unregister">
          <property name="alias" value="/myService" />
          <property name="httpService" ref="anHttpService" />
          <property name="servlet" ref="aCamelServlet" />
          <property name="servletName" value="aCamelServlet" />
      </bean>
      
      <bean id="aCamelServlet"
          class="org.apache.camel.component.servlet.CamelHttpTransportServlet" />
      
      1. 将其余配置更改为
      <restConfiguration bindingMode="json" component="servlet">
        <endpointProperty key="servletName" value="aCamelServlet" />
      </restConfiguration>
      

      另外,将 camel-servlet 添加到 pom.xml 中。通过这样做,两个包都可以使用自己的上下文路径启动并运行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-26
        • 1970-01-01
        • 2013-02-18
        相关资源
        最近更新 更多