我正在尝试从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文件中检索它?
我有几个软件包(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).
如果有比使用拦截器更好的方法,我对此持开放态度.主要目标是:
假设我在单独的RouteBuilder类中创建了我的路由.看起来像:
我想在没有JMS代理和没有DB的情况下对这条路线进行单元测试.我知道我可以模拟我的处理器实现,但这还不够.我不想改变这条路线(假设我在jar文件中得到了这个类).据我所知,从Camel in Action(第6.2.6节)中,为了能够使用端点和其他东西的模拟,我需要更改我的路由端点定义(在本书的示例中,这是"mina:tcp:/"的更改/ miranda"to"mock:miranda"etc).
是否可以在不改变路径定义的情况下完全隔离测试流量?如果我将RouteBuilder作为一个单独的类,我是否被迫以某种方式"复制"路由定义并手动更改它?是不是测试了错误的东西?
我对Camel很新,对我而言,能够在发布路线时进行隔离单元测试真的很酷.只是为了能够改变一些东西,运行小测试,观察结果等等.
Apache Camel提供了一种可配置的体系结构,允许在运行时动态确定Web服务消息,以便在Java环境中托管Web服务.
我想知道是否有一个类似的/等效的框架用于用c#编写并托管在.Net/SharePoint环境中的应用程序?
当使用Spring DSL与Camel"玩"时,我遇到了以下问题.假设预期的消息流如下所示:
所以类似于:
<route>
<from uri="...">
<to uri="...">
<to uri="...">
</route>
Run Code Online (Sandbox Code Playgroud)
问题:如何在步骤1中将参数存储在Spring DSL中,以便稍后在步骤3中使用它们?
因此,我想从步骤1中收到的消息的XML主体中提取XML参数,并将它们放入变量中,然后我可以使用它来组成要在步骤3中发送的消息.
为了提取参数,我正在考虑使用XPATH.看起来没问题,但我只是不知道如何将XPATH的输出放入变量中,然后再使用该变量......(语法??)
注意:正如您所看到的,我的开发知识相当有限......对不起.但如果有人可以帮助这个,那仍然会很棒:).
我需要在WAS ND 8.0集群下使用Apache Camel(或Spring Integration)运行组件.它们都在启动时运行一些线程,并在正常关闭时停止它们.提供WAS托管的线程池没问题.但是这些线程必须同时在单个集群的节点上运行.此外,它必须是高可用的,即当活动节点下降时切换到其他节点.
我找到的解决方案 - 是WAS Partitioning Facility.它需要额外的扩展部署许可证.这是唯一的方法,还是只有一些方法可以使用Network Deployment许可证来实现这一点?
提前致谢.
websphere singleton cluster-computing apache-camel spring-integration
我正在学习ActiveMQ和Camel,目标是创建一个像这样工作的小原型系统:
alt text http://www.paulstovell.com/get/stackoverflow-questions/Queues.png(big )
当订单放入订单系统时,会向任何订户(发布/订阅系统)发送消息,他们可以在处理订单时发挥作用.该订单,航运和进销存应用程序都有自己的ActiveMQ安装,因此,如果任何三个系统都处于离线状态,其他人可以继续工作.有些东西负责在ActiveMQ安装之间移动消息.
如果Apache Camel位于同一个ActiveMQ实例上,那么让Apache Camel通过路由将消息从一个队列移动到另一个队列非常容易.所以这适用于管理订阅队列.
接下来的挑战是将消息从一个ActiveMQ实例推送到另一个实例,这就是我不确定接下来要看什么的位置.
我一直在研究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可以发送的对象?
我有一系列"流水线"组件,都通过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)
我只是不明白如何正确连接所有内容:
comp到inputQueue和outputQueueMockEndpoints?MockEndpoint,我如何设置期望,以便assertIsSatisfied()检查特定队列中是否存在消息,或者特定队列是否包含消息?我正在使用Camel&Spring开发Java项目.我们想在Spring完成它的事情并且Camel完成构建所有路由之后在单例bean上触发初始化方法.
我们不能在类创建时调用该方法,因为它与从@Component spring注释中获取的其他类具有动态链接,并且我们不知道这些类何时/是否已经加载到实际运行init方法作为a的一部分构造函数.
如何在Camel启动完成后立即调用一个或多个方法来运行?
谢谢!
apache-camel ×10
java ×4
routes ×2
spring ×2
.net ×1
c# ×1
endpoint ×1
integration ×1
interceptor ×1
junit ×1
messaging ×1
mocking ×1
osgi ×1
osgi-bundle ×1
singleton ×1
unit-testing ×1
websphere ×1