标签: apache-camel

来自Camel Context onException的Stacktrace

我正在尝试从Apache Camel中的onException处理程序检索stacktrace:

   <onException>
            <exception>java.lang.Exception</exception>
            <handled>
                <constant>true</constant>
            </handled>

            <setHeader headerName="exception">
                <simple>${exception}</simple>
            </setHeader>
   </onException>
Run Code Online (Sandbox Code Playgroud)

但是,上面只显示异常而不是整个堆栈跟踪.

我知道Camel将捕获的异常作为Exchange上的属性存储,密钥为:Exchange.EXCEPTION_CAUGHT,但是如何从camel context routes文件中检索它?

apache-camel

22
推荐指数
1
解决办法
2万
查看次数

OSGi容器中的Camel:将InterceptStrategy应用于所有驼峰上下文

我有几个软件包(A,B和C)部署到OSGi容器,每个包含一个CamelContext和一些路由.我有另一个包(M),CamelContext带有一个路由(用于收集监控数据)和一个InterceptStrategybean.我希望InterceptStrategyM中的bean自动应用于CamelContext容器中的所有其他s(即A,B和C中的那些),而不必修改其他bundle.

最终,目标是将每个数据从CamelContextM中窃听到路线中,而不必对A,B或C进行任何更改以明确路由Exchange.这种方法或类似的方法是否可行?

所有CamelContexts都是使用Spring XML配置的.


更新:附加上下文

捆绑包A,B和C包含负责处理数据的核心产品.Bundle M包含一个可选的监控工具,用于测量流经A,B和C的数据的某些参数.目前,添加可选工具需要更改A,B和C中的路由以添加额外的Processors来丰富Exchange使用监控数据并在<to />端点之前读取监控数据.

目标是能够将Bundle M放入已经过验证的A,B和C系统; 并使其自动应用于现有路由,而无需修改现有和工作捆绑包的配置.这可以接受的进行修改,以A,B和C,以支持这一点,只要改变不会导致A,B和C依靠M上运行(即ABC仍然必须运行不M).

如果有比使用拦截器更好的方法,我对此持开放态度.主要目标是:

  1. 保持A,B和C与M分离(特别是在开发期间)
  2. 确保将M与A,B和C集成在一起尽可能简单
  3. 允许集成M而无需手动更改A,B或C.

java osgi apache-camel interceptor osgi-bundle

22
推荐指数
1
解决办法
597
查看次数

如何在Apache Camel中对生产路线进行单元测试?

假设我在单独的RouteBuilder类中创建了我的路由.看起来像:

  • 从JMS队列中获取消息
  • 做一些转型,验证等
  • 取决于验证结果转发到特定的JMS队列并在DB中保存

我想在没有JMS代理和没有DB的情况下对这条路线进行单元测试.我知道我可以模拟我的处理器实现,但这还不够.我不想改变这条路线(假设我在jar文件中得到了这个类).据我所知,从Camel in Action(第6.2.6节)中,为了能够使用端点和其他东西的模拟,我需要更改我的路由端点定义(在本书的示例中,这是"mina:tcp:/"的更改/ miranda"to"mock:miranda"etc).

是否可以在不改变路径定义的情况下完全隔离测试流量?如果我将RouteBuilder作为一个单独的类,我是否被迫以某种方式"复制"路由定义并手动更改它?是不是测试了错误的东西?

我对Camel很新,对我而言,能够在发布路线时进行隔离单元测试真的很酷.只是为了能够改变一些东西,运行小测试,观察结果等等.

integration junit routes mocking apache-camel

20
推荐指数
2
解决办法
2万
查看次数

.net中的Apache骆驼替代品?

Apache Camel提供了一种可配置的体系结构,允许在运行时动态确定Web服务消息,以便在Java环境中托管Web服务.

我想知道是否有一个类似的/等效的框架用于用c#编写并托管在.Net/SharePoint环境中的应用程序?

.net c# apache-camel

18
推荐指数
1
解决办法
1万
查看次数

Apache Camel:如何存储变量供以后使用

当使用Spring DSL与Camel"玩"时,我遇到了以下问题.假设预期的消息流如下所示:

  1. 客户端将带有XML主体的HTTP POST消息发送到CAMEL
  2. CAMEL向服务器代理HTTP POST消息,使用来自接收到的XML主体的信息略微调整URI(例如:使用XPATH过滤掉某个参数)
  3. 在CAMEL收到回复后,CAMEL使用1中收到的XML主体中的参数向服务器发送HTTP PUT消息

所以类似于:

<route>
   <from uri="...">
   <to uri="...">
   <to uri="...">
 </route>
Run Code Online (Sandbox Code Playgroud)

问题:如何在步骤1中将参数存储在Spring DSL中,以便稍后在步骤3中使用它们?

因此,我想从步骤1中收到的消息的XML主体中提取XML参数,并将它们放入变量中,然后我可以使用它来组成要在步骤3中发送的消息.

为了提取参数,我正在考虑使用XPATH.看起来没问题,但我只是不知道如何将XPATH的输出放入变量中,然后再使用该变量......(语法??)

注意:正如您所看到的,我的开发知识相当有限......对不起.但如果有人可以帮助这个,那仍然会很棒:).

spring apache-camel

18
推荐指数
2
解决办法
4万
查看次数

Websphere Cluster中的群集范围单例

我需要在WAS ND 8.0集群下使用Apache Camel(或Spring Integration)运行组件.它们都在启动时运行一些线程,并在正常关闭时停止它们.提供WAS托管的线程池没问题.但是这些线程必须同时在单个集群的节点上运行.此外,它必须是高可用的,即当活动节点下降时切换到其他节点.

我找到的解决方案 - 是WAS Partitioning Facility.它需要额外的扩展部署许可证.这是唯一的方法,还是只有一些方法可以使用Network Deployment许可证来实现这一点?

提前致谢.

websphere singleton cluster-computing apache-camel spring-integration

18
推荐指数
1
解决办法
1358
查看次数

分布式ActiveMQ与Camel

我正在学习ActiveMQ和Camel,目标是创建一个像这样工作的小原型系统:

alt text http://www.paulstovell.com/get/stackoverflow-questions/Queues.png(big )

当订单放入订单系统时,会向任何订户(发布/订阅系统)发送消息,他们可以在处理订单时发挥作用.该订单,航运进销存应用程序都有自己的ActiveMQ安装,因此,如果任何三个系统都处于离线状态,其他人可以继续工作.有些东西负责在ActiveMQ安装之间移动消息.

如果Apache Camel位于同一个ActiveMQ实例上,那么让Apache Camel通过路由将消息从一个队列移动到另一个队列非常容易.所以这适用于管理订阅队列.

接下来的挑战是将消息从一个ActiveMQ实例推送到另一个实例,这就是我不确定接下来要看什么的位置.

  1. Camel可以在不同的ActiveMQ安装之间路由吗?(如果它们在不同的机器上,我无法弄清楚JMI端点URI是什么).
  2. 我知道ActiveMQ具有存储和转发功能.这是我用于在订单和发货/发票之间移动消息的方法吗?
  3. 或者这就是Apache ServiceMix要解决的问题?

activemq-classic apache-camel apache-servicemix

17
推荐指数
1
解决办法
5867
查看次数

骆驼路线和终点

我一直在研究Apache Camel文档,试图对其最基本的两个概念(端点和路由)进行具体的理解,尽管这些术语在整个文档中随处可见,但我找不到实际定义它们的参考它们是用来做什么的.尽管他们的名字听起来相当明显,而且我我明白了它们是什么,但我现在已被分配到一项让我深入Apache Camel Land的任务,而且我理解这些机制至关重要是.

我的猜测是"端点"只是一个bean - 可以像配置文件一样配置在配置文件中 - 将名称映射到URI /端口组合(这取自W3C文档).在Apache Camel的上下文中,我的猜测是端点用于将组件连接在一起,因此可以在它们之间形成"路由"(连接/映射).因此,当生活在端点1的组件A想要与生活在端点2的组件B通信时,只要存在从1到2的映射,Camel就能够在这两者之间传输消息.

如果我错在这里,请阻止我并纠正我!

所以现在,我已经看到了可以在Java中配置路由的示例:

from("endpointA").routeId("someMessage").to("endpointB");
Run Code Online (Sandbox Code Playgroud)

我已经看到了可以在XML中配置路由的示例:

<route id="">
    <from .../>
    <to .../>
</route>
Run Code Online (Sandbox Code Playgroud)

这两种方法是配置路由,还是完全不同的概念?

最后,端点之间可以路由的消息格式是什么?例如,如果它必须是XML,那么这些路由消息的XSD /模式是什么?如果它必须是Java对象,那么哪些边界/限制适用于Camel可以发送的对象?

java routes apache-camel endpoint

17
推荐指数
1
解决办法
2万
查看次数

使用MockEndpoints测试Camel

我有一系列"流水线"组件,都通过ActiveMQ消息队列进行通信.每个组件都使用Camel将每个队列视为端点.每个组件使用相同的基本模式:

基本组件模式

每个组件消耗输入队列中的消息,处理消息,然后在出站/输出队列上放置1+消息.然后,"输出"队列成为链中下一个组件的"输入"队列.很基本的.

我现在正试图卷起袖子,并使用MockEndpointsCamel的测试API提供的每个组件的单元测试.我一直在倾倒javadocs和Camel网站上的一些例子,但我很难连接所有的点.

在我看来,对于每个组件,我的单元测试的一部分将要完成以下三件事:

  • 测试是否有消息等待特定的"输入"队列
  • 拉下这些消息并处理它们
  • 将新消息推送到"输出"队列并验证它们是否在那里

相信我需要MockEndpoints为每个队列创建如下:

@EndpointInject(uri = "mock:inputQueue")
protected MockEndpoint intputQueue;

@EndpointInject(uri = "mock:outputQueue")
protected MockEndpoint outputQueue;
Run Code Online (Sandbox Code Playgroud)

所以现在,在我的JUnit测试方法中,我可以设置期望并与这些端点交互:

@Test
public final void processMethodShouldSendToOutputQueue()
{
    Component comp = new Component();
    comp.process();

    outputQueue.assertIsSatisfied();
}
Run Code Online (Sandbox Code Playgroud)

我只是不明白如何正确连接所有内容:

  • 如何连接compinputQueueoutputQueueMockEndpoints?
  • 对于每个MockEndpoint,我如何设置期望,以便assertIsSatisfied()检查特定队列中是否存在消息,或者特定队列是否包含消息?

java messaging unit-testing apache-camel

17
推荐指数
1
解决办法
2万
查看次数

Apache Camel - 在启动时触发任务仅运行一次

我正在使用Camel&Spring开发Java项目.我们想在Spring完成它的事情并且Camel完成构建所有路由之后在单例bean上触发初始化方法.

我们不能在类创建时调用该方法,因为它与从@Component spring注释中获取的其他类具有动态链接,并且我们不知道这些类何时/是否已经加载到实际运行init方法作为a的一部分构造函数.

如何在Camel启动完成后立即调用一个或多个方法来运行?

谢谢!

java spring apache-camel

16
推荐指数
2
解决办法
2万
查看次数