当前位置: 首页 > 知识库问答 >
问题:

连接到Camel-SEDA队列

顾宏朗
2023-03-14

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

<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队列,则消息将发送到那里,但不会发送到路由的下一个元素

共有2个答案

公冶同
2023-03-14

骆驼中的SEDA成分作为异步内部通道。如果您需要将消息处理解耦到多个线程中并具有更具弹性的实现,这将非常有用。

在您的示例中,您有一个 activemq endpoint。在概念基础上,它将执行与SEDA组件几乎相同的功能,但具有更多的功能。我建议你使用activemq或其他协议来与Camel通信的客户端。

也就是说,如果您的客户端运行在与Camel相同的java应用程序中,并且您的客户端可以获得Camel上下文(这是我通常建议反对的设计),您可以使用产品模板向SEDA组件发送消息。看看虚拟机组件,它与SEDA几乎相同,但可以在同一个虚拟机中使用,而不是在同一个骆驼上下文中。生产者模板是如何工作的。

羿经武
2023-03-14

正如Petter所建议的,您的客户端需要连接到定义SEDA路由的相同Camel Context。在您的示例中,您似乎正在创建一个新的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>

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

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

也就是说,如果您的客户机代码不在同一个JVM中,或者无法获得同一个CamelContext的句柄,那么您可以选择使用JMS、REST、HTTP(或任何支持远程客户机接口的camel组件)...而不是SEDAendpoint或其附近。

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

from("jetty:http://localhost:9001/input").to("seda:input");
 类似资料:
  • 我正在开发一个使用Apache Camel和JMX活动的小应用程序。非常简单地说,我有一个使用SEDA组件的路由--只有一个消费者--简而言之,它创建自己的线程,并在路由繁忙时对传入的交换进行排队。 我想知道Camel中是否有一些现成的东西允许我这样做,或者我忽略了Hawtio或JConsole中的一些东西。 提前谢了。

  • 我正在开发我的第一个Azure实现,我已经设置了我的Azure帐户,并且我使用NuGet为我的应用程序安装了正确的DLL和配置。当我将我的WCF客户端设置为指向服务总线队列并运行该方法时,会出现以下异常: 微软。ServiceBus.服务器错误 我的endpoint配置是: 我的行为是: 这个错误消息非常通用,我不确定我应该首先查看哪个位置

  • 我是Spring的新手,正在开发基于云的应用程序,并尝试使用RabbitTemplate和RabbitMQ。 我能够使用数据存储到队列中。 但是当我从同一个队列接收数据时,使用 我的例外情况如下: ERR 由: java.io.IOException 2016-09-13T11:15:21.38 0530 [App/0] ERR at com.rabbitmq.client.impl.AMQCha

  • 我有一个简单的骆驼路线,从Kafka的主题消费。做一些处理并写回另一个Kafka主题。 我怀疑Kafka可能是一个请求-应答交换,响应被反馈给源endpoint。因此尝试向Seda添加“waitfortasktoComplete=Never”。但没有成功。 任何帮助都将不胜感激。

  • 我正在尝试让ApacheCamel的REST DSL工作,但它无法连接到我。 我有一个名为RouteBuilder的程序: 但是这些路线实际上并不起作用。 这是在一个Spring Boot应用程序中,该应用程序具有通过JAX-RS定义的其他RESTendpoint,但这是一个集成包,我希望能够将其分开。奇怪的是,几个月前,我还没开始做其他事情,但现在,回头来看,我甚至无法让这个简单的endpoin

  • 我正在尝试使用ccdt.tab文件连接到队列管理器。以下是我所尝试的: 以下是ccdt.tab中的内容 有谁知道哪里出了问题,怎么修复? PS:我确实看到了那些帖子:在JMS中使用CCDT文件连接到IBM MQ 下面是链接的异常和异常在I时打印出来的: 以下是当我时链接的异常和异常打印: