-6ren">
gpt4 book ai didi

java - 连接到 Camel-SEDA 队列

转载 作者:行者123 更新时间:2023-11-29 07:14:54 25 4
gpt4 key购买 nike

我无法连接到具有 SEDA 队列的 Camel 路线。在服务器端我有以下配置:

<camel:route>
<camel:from uri="seda:input"/>
<camel:log message =">>>>>data is : ${body}"/>
<camel:inOnly uri="activemq:queue:TESTQUEUE"/>
</camel:route>

我正在尝试从这样的独立客户端访问这条路线:

public static void main(String[] args) {

CamelContext context = new DefaultCamelContext();
producer = context.createProducerTemplate();
producer.sendBody("seda:input","Hey");

}

但是我的生产者无法连接到 seda 队列。无法进入我的路线队列。无法在我的 bean 属性中添加 camelContext。我收到“bean 类的无效属性‘camelContext’”。如果我将正文发送到 SEDA 队列,消息将发送到那里但不会发送到路由的下一个元素

最佳答案

正如 Petter 所建议的,您的客户端需要连接到定义 SEDA 路由的同一个 Camel 上下文。在您的示例中,您似乎正在创建一个新的 DefaultCamelContext() 并尝试通过该路由发送消息这是在另一个上下文中定义的。

通常,我在 Spring XML 中定义 Camel 上下文,然后将上下文注入(inject)任何需要它的类...

<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>

然后,您的客户端代码只需调用以下...

getCamelContext().createProducerTemplate().sendBody("seda:input","Hey");

就是说,如果您的客户端代码不在同一个 JVM 中或无法获得同一个 CamelContext 的句柄,那么您的选择是使用 JMS、REST、HTTP(或任何支持远程客户端接口(interface)的 camel component )...代替或围绕 SEDA 端点。

例如,您可以像这样使用 HTTP 端点(通过 camel-jetty)包装对 SEDA 队列的访问...

from("jetty:http://localhost:9001/input").to("seda:input");

关于java - 连接到 Camel-SEDA 队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10464762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com