我无法连接到具有SEDA队列的驼峰路由.在服务器端我有以下配置:
<camel:route>
<camel:from uri="seda:input"/>
<camel:log message =">>>>>data is : ${body}"/>
<camel:inOnly uri="activemq:queue:TESTQUEUE"/>
</camel:route>
Run Code Online (Sandbox Code Playgroud)
我试图从像这样的独立客户端这条路线:
public static void main(String[] args) {
CamelContext context = new DefaultCamelContext();
producer = context.createProducerTemplate();
producer.sendBody("seda:input","Hey");
}
Run Code Online (Sandbox Code Playgroud)
但我的生产者无法连接到seda队列.无法打到我的路线排队.无法在我的bean属性中添加camelContext.我得到"bean类的无效属性'camelContext'".如果我将正文发送到SEDA队列,则消息将转到那里,但不会发送到溃败的下一个元素
正如Petter建议的那样,您的客户端需要连接到定义SEDA路由的相同Camel上下文.在您的示例中,您似乎正在创建新的DefaultCamelContext()并尝试将消息发送到定义的路由在另一个背景下.
通常,我在Spring XML中定义Camel Context,然后将上下文注入到需要它的任何类中......
<camelContext id="camelContext" xmlns="http://camel.apache.org/schema/spring">
<routeBuilder ref="myRouter"/>
</camelContext>
<bean id="myClient" class="com.mycompany.MyClient">
<property name="camelContext" ref="camelContext"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
然后,您的客户端代码只需要调用以下内容...
getCamelContext().createProducerTemplate().sendBody("seda:input","Hey");
Run Code Online (Sandbox Code Playgroud)
也就是说,如果您的客户端代码不在同一个JVM中或者无法获取相同CamelContext的句柄,那么您的选择是使用JMS,REST,HTTP(或任何支持远程客户端接口的Camel 组件)......而不是或围绕SEDA端点.
例如,你可以用这样的HTTP端点(通过camel-jetty)封装对SEDA队列的访问...
from("jetty:http://localhost:9001/input").to("seda:input");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6222 次 |
| 最近记录: |