在 Camel 中获取 AMQP 端点时遇到问题
Trouble getting AMQP endpoint going in Camel
我正在尝试使用 AMQP 队列作为路由的起点和终点。按照 http://camel.apache.org/amqp.html
中的示例,我无法使其正常工作
有人能给我指出正确的方向吗?
我正在 karaf 的蓝图容器中部署它。
我的设置是:
<bean id="amqpConnectionFactory"
class="org.apache.qpid.amqp_1_0.jms.impl.ConnectionFactoryImpl"
factory-method="createFromURL">
<argument value="${IssBroker.url}" />
</bean>
<bean id="amqpConnection"
class="org.apache.camel.component.jms.JmsComponent" >
<property name="connectionFactory" ref="amqpConnectionFactory"/>
</bean>
...
<route>
<from uri="amqp:{{IssFrom.queue}}"/>
<process ref="issPreprocessor"/>
<unmarshal ref="IssRequest"/>
<process ref="webServiceProcessor"/>
<to uri="webService"/>
<process ref="packageWebServiceReplyForIss"/>
<to uri="amqp:{{IssTo.queue}}"/>
</route>
当我在 karaf 中启动时,我得到:
2015-10-08 13:34:00,968 | ERROR | nsole user karaf | BlueprintCamelContext | 109 - org.apache.camel.camel-blueprint - 2.15.3 | Error occurred during starting Camel: CamelContext(myCamelContext) due connectionFactory must be specified
java.lang.IllegalArgumentException: connectionFactory must be specified
at org.apache.camel.util.ObjectHelper.notNull(ObjectHelper.java:293)
at org.apache.camel.component.jms.JmsConfiguration.createConnectionFactory(JmsConfiguration.java:1131)
at org.apache.camel.component.jms.JmsConfiguration.getConnectionFactory(JmsConfiguration.java:485)
at org.apache.camel.component.jms.JmsConfiguration.createListenerConnectionFactory(JmsConfiguration.java:1140)
at org.apache.camel.component.jms.JmsConfiguration.getListenerConnectionFactory(JmsConfiguration.java:504)
at org.apache.camel.component.jms.JmsConfiguration.configureMessageListenerContainer(JmsConfiguration.java:967)
at org.apache.camel.component.jms.JmsConfiguration.createMessageListenerContainer(JmsConfiguration.java:448)
at org.apache.camel.component.jms.JmsEndpoint.createMessageListenerContainer(JmsEndpoint.java:184)
at org.apache.camel.component.jms.JmsEndpoint.createConsumer(JmsEndpoint.java:179)
at org.apache.camel.component.jms.JmsEndpoint.createConsumer(JmsEndpoint.java:71)
...
您的 amqpConnectionFactory bean 似乎最终为空,原因之一是您的 IssBroker.url 属性 为空或格式错误。你有没有在你的 karaf 容器中覆盖这个 属性?
更有可能的答案:
您已经为您的 JmsComponent 提供了 id amqpConnection,然后使用 amqp:${{IssFrom.queue}}
将 id 更改为 amqp 或将路由中使用的组件更改为 amqpConnection:${{IssFrom.queue}}
我正在尝试使用 AMQP 队列作为路由的起点和终点。按照 http://camel.apache.org/amqp.html
中的示例,我无法使其正常工作有人能给我指出正确的方向吗?
我正在 karaf 的蓝图容器中部署它。
我的设置是:
<bean id="amqpConnectionFactory"
class="org.apache.qpid.amqp_1_0.jms.impl.ConnectionFactoryImpl"
factory-method="createFromURL">
<argument value="${IssBroker.url}" />
</bean>
<bean id="amqpConnection"
class="org.apache.camel.component.jms.JmsComponent" >
<property name="connectionFactory" ref="amqpConnectionFactory"/>
</bean>
...
<route>
<from uri="amqp:{{IssFrom.queue}}"/>
<process ref="issPreprocessor"/>
<unmarshal ref="IssRequest"/>
<process ref="webServiceProcessor"/>
<to uri="webService"/>
<process ref="packageWebServiceReplyForIss"/>
<to uri="amqp:{{IssTo.queue}}"/>
</route>
当我在 karaf 中启动时,我得到:
2015-10-08 13:34:00,968 | ERROR | nsole user karaf | BlueprintCamelContext | 109 - org.apache.camel.camel-blueprint - 2.15.3 | Error occurred during starting Camel: CamelContext(myCamelContext) due connectionFactory must be specified
java.lang.IllegalArgumentException: connectionFactory must be specified
at org.apache.camel.util.ObjectHelper.notNull(ObjectHelper.java:293)
at org.apache.camel.component.jms.JmsConfiguration.createConnectionFactory(JmsConfiguration.java:1131)
at org.apache.camel.component.jms.JmsConfiguration.getConnectionFactory(JmsConfiguration.java:485)
at org.apache.camel.component.jms.JmsConfiguration.createListenerConnectionFactory(JmsConfiguration.java:1140)
at org.apache.camel.component.jms.JmsConfiguration.getListenerConnectionFactory(JmsConfiguration.java:504)
at org.apache.camel.component.jms.JmsConfiguration.configureMessageListenerContainer(JmsConfiguration.java:967)
at org.apache.camel.component.jms.JmsConfiguration.createMessageListenerContainer(JmsConfiguration.java:448)
at org.apache.camel.component.jms.JmsEndpoint.createMessageListenerContainer(JmsEndpoint.java:184)
at org.apache.camel.component.jms.JmsEndpoint.createConsumer(JmsEndpoint.java:179)
at org.apache.camel.component.jms.JmsEndpoint.createConsumer(JmsEndpoint.java:71)
...
您的 amqpConnectionFactory bean 似乎最终为空,原因之一是您的 IssBroker.url 属性 为空或格式错误。你有没有在你的 karaf 容器中覆盖这个 属性?
更有可能的答案:
您已经为您的 JmsComponent 提供了 id amqpConnection,然后使用 amqp:${{IssFrom.queue}}
将 id 更改为 amqp 或将路由中使用的组件更改为 amqpConnection:${{IssFrom.queue}}