Camel REST DSL - 地址已在使用中:绑定异常
Camel REST DSL - Address already in use: bind Exception
我在我的项目中使用 REST DSL 组件 Jboss Fuse Karaf 6.3 实例。我有两个问题
对于 restConfiguration,我必须始终指定一个端口号。尝试将组件作为 "servlet",仍然需要提供端口号。有没有办法避免这种情况?请注意,我不是在此处创建 Web 项目。
One Bundle 在端口 8080 上使用 "restlet" 组件公开其余端点,工作正常。另一个 Bundle 试图公开几个具有相同 restConfiguration 的端点。现在由于以下异常
,此捆绑包无法启动
Caused by: java.net.BindException: Address already in use: bind
at 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">
请问有什么解决办法或建议吗?
当使用 restlet、jetty 等时,您不能在 karaf/jboss fuse 中使用多个捆绑包执行此操作。您只能在使用 servlet 时重新使用相同的端口,因为那时您正在使用共享的 http service/servlet 开箱即用 JBoss 保险丝。
所以你应该这样做
<restConfiguration bindingMode="off" component="servlet"/>
如果你使用 swagger api-docs 和 camel-swagger-java.
,则使用 servlet 时的端口号仅用于文档目的
非常感谢克劳斯。
我能够让它与 "servlet" 组件一起工作,但有一些下面提到的额外更改
- 将 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" />
- 将其余配置更改为
<restConfiguration bindingMode="json" component="servlet">
<endpointProperty key="servletName" value="aCamelServlet" />
</restConfiguration>
此外,将 camel-servlet 添加到 pom.xml 文件中。通过这样做,两个包都启动了并且 运行 它自己的上下文路径。
我在我的项目中使用 REST DSL 组件 Jboss Fuse Karaf 6.3 实例。我有两个问题
对于 restConfiguration,我必须始终指定一个端口号。尝试将组件作为 "servlet",仍然需要提供端口号。有没有办法避免这种情况?请注意,我不是在此处创建 Web 项目。
One Bundle 在端口 8080 上使用 "restlet" 组件公开其余端点,工作正常。另一个 Bundle 试图公开几个具有相同 restConfiguration 的端点。现在由于以下异常
,此捆绑包无法启动Caused by: java.net.BindException: Address already in use: bind at 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">
请问有什么解决办法或建议吗?
当使用 restlet、jetty 等时,您不能在 karaf/jboss fuse 中使用多个捆绑包执行此操作。您只能在使用 servlet 时重新使用相同的端口,因为那时您正在使用共享的 http service/servlet 开箱即用 JBoss 保险丝。
所以你应该这样做
<restConfiguration bindingMode="off" component="servlet"/>
如果你使用 swagger api-docs 和 camel-swagger-java.
,则使用 servlet 时的端口号仅用于文档目的非常感谢克劳斯。
我能够让它与 "servlet" 组件一起工作,但有一些下面提到的额外更改
- 将 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" />
- 将其余配置更改为
<restConfiguration bindingMode="json" component="servlet">
<endpointProperty key="servletName" value="aCamelServlet" />
</restConfiguration>
此外,将 camel-servlet 添加到 pom.xml 文件中。通过这样做,两个包都启动了并且 运行 它自己的上下文路径。