标签: apache-camel

如何在从站在故障转移中变为活动状态时,如何在从属ActiveMQ上启动Camel路由?

我对嵌入式Camel路由中的远程JMS队列有持久的消费者.是否可以使用主从配置进行此类路由?现在看来,当启动从属ActiveMQ时,Camel路由已经启动并激活,而不是在发生实际故障转移时.

现在它导致从属实例接收也发送给主服务器的相同消息,这会导致重复消息在故障转移时到达队列.

我正在使用ActiveMQ 5.3和Apache Camel 2.1.

failover activemq-classic apache-camel master-slave

6
推荐指数
1
解决办法
1498
查看次数

使用Scala和Apache Camel时是否存在已知问题?

我知道Camel支持Scala DSL.除此之外

  • 对于基于Camel的项目,Scala完全替换Java(该语言)是否现实?

  • 已知存在哪种已知问题?

  • 这些问题存在哪些变通方法(除了使用Java)?

我主要是寻找更少的boilerplaty代码.

java scala apache-camel

6
推荐指数
1
解决办法
631
查看次数

在ServiceMix中管理和监视Apache-Camel路由

作为Camel和ServiceMix的用户,我经常需要监控这些工具以用于开发目的.我主要使用JConsole从ServiceMix和Camel访问MBean.它为ESB开发人员提供了一些非常有用的指标.

我还使用karaf(web)控制台来跟踪我的路线和捆绑状态.环顾StackOverflow,我发现了一个有趣的链接,解释了如何为ServiceMix 4设置Hyperic HQ:使用Hyperic HQ监控Servicemix.

它们是您认为值得学习/用于Camel/SMX开发的其他工具吗?

monitoring esb apache-camel apache-servicemix

6
推荐指数
2
解决办法
8709
查看次数

Camel文件消费者模板 - 线程保持活跃

我的问题非常类似于http://camel.465427.n5.nabble.com/FTP-ConsumerTemplate-Threads-remaining-alive-td5548338.html.

你如何杀死不同端点上的Camel锁定线程?我尝试删除端点并在设置doneUoW后停止ConsumerTemplate,但这些都不起作用.

multithreading file out-of-memory apache-camel consumer

6
推荐指数
1
解决办法
1136
查看次数

JMSExpiration与TimeToLive

我正在尝试在Blueprint XML Camel路由中设置消息过期.我想要设置为到期的值保存在消息体(protobuf)中.

这是我的代码: -

<setHeader headerName="AMQ_SCHEDULED_DELAY">
    <method bean="NotificationScheduler" method="postponeSending" />
</setHeader>
<setHeader headerName="JMSExpiration">
    <method bean="NotificationScheduler" method="getExpiry" />
</setHeader>
<setHeader headerName="ExpirationTest">
    <method bean="NotificationScheduler" method="getExpiry" />
</setHeader>
<to uri="activemq:notifications.splitter" />
Run Code Online (Sandbox Code Playgroud)

正如您在下面的屏幕截图中看到的,我成功设置了三个标题中的两个,但"JMSExpiration"的设置(根据此主题)没有任何效果.

ActiveMQWeb片段

我知道我也可以使用收件人列表模式动态设置uri - 即从消息数据中提取到期日并附加?timeToLive=...选项.然而,这对我来说似乎有点笨拙.

有没有办法通过XML中的setHeader设置过期?

谢谢,

J.

activemq-classic jms apache-camel

6
推荐指数
1
解决办法
4943
查看次数

处理器,组件和端点之间的差异

我正在研究Apache Camel.

有人可以解释处理器,组件和端点之间关于Apache Camel的区别.

apache-camel

6
推荐指数
2
解决办法
4518
查看次数

如何使用Apache Camel转储使用HTTP组件发送的HTTP正文和标头

如何使用此路由转储使用Apache Camel HTTP组件发送的HTTP正文和标头:

   from('direct:abc').
   setHeader(Exchange.HTTP_URI, constant("${config.gnutch.solr.coreUrl}/select")).
   setHeader(Exchange.HTTP_QUERY, constant("q=${q}&wt=xml")).
   setHeader(Exchange.CONTENT_TYPE, constant('application/xml')).
   setHeader(Exchange.HTTP_METHOD, constant('GET')).
   setBody(constant(null)).
   to("http://null")
Run Code Online (Sandbox Code Playgroud)

这是groovy中的Camel DSL代码.那可能吗?

java groovy apache-camel

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

用Hazelcast替换JMS?

我们目前正在运行由一组JMS队列(无主题)连接的分布式Java应用程序.Java应用程序大量使用Apache Camel框架,该框架也用于通过JMS进行通信.作为JMS提供商,我们正在使用ActiveMQ.我们对排队解决方案的要求在功能方面非常基础 - 在某种程度上可与本地Java队列和Camel SEDA队列相媲美:

  1. 队列需要高度可用
  2. 平均而言,消息非常小(几KB),但不得对大小进行限制(即,传输的消息的一小部分有几个MB)
  3. 交付必须"恰好一次"(例如,亚马逊SQS,仅保证"至少一次",这对我们来说是不可接受的)

我们不需要持久队列,因为消息在进入排队系统之前存储在数据库中.到目前为止,ActiveMQ在设置上花了一些时间后对我们来说效果很好.但是,有两个问题因为我们正在寻找不同的解决方案:

  • 我们目前通过在JDBC Master-Slave-Mode中运行AMQ来实现高可用性.故障转移工作正常,但不如所希望的那样透明.
  • JDBC存储对性能有负面影响,特别是如果我们在几个(> 6)队列上传输更大的消息(> = 2-3 MB).此外,我们有不必要地打扰我们的数据库的感觉.

我们知道AMQ从版本5.9开始支持使用Zookeeper的HA.不过,不久前,我们开始考虑/评估Hazelcast作为AMQ的替代品.很长一段时间,Hazelcast看起来非常迷人,因为它似乎满足了我们所有的要求,并且似乎比使用Zookeeper的AMQ更简单.此外,Camel通过其Hazelcast SEDA功能为使用Hazelcast作为排队解决方案提供了很好的支持.鉴于Hazelcast似乎是我们完美替代AMQ的事实,我们不知道网上没有太多可用的信息讨论Hazelcast作为JMS的(严重)替代品.因此,我们想知道:

  • 用Hazelcast替换JMS有什么缺点(性能,可靠性......)?
  • 是否有人在Hazelcast中遇到过多MB消息的问题?
  • 有没有人遇到过Hazelcast的任何可靠性问题?我们目前仍在使用2.6(因为Camel组件当前正在使用该版本)并且已经在Ubuntu上进行了守护.到目前为止它似乎运行得很完美,但是一些额外的经验会很好听.

java queue activemq-classic apache-camel hazelcast

6
推荐指数
0
解决办法
3753
查看次数

骆驼选择示例

我有2个POJO:

public class Witch {
    private Broom broom;
    private List<Spell> spells;

    // constructors, getters/setters, etc.
}

public class ValidatedWitches {
    private List<Witch> goodWitches
    private List<Witch> badWitches;

    // constructors, getters/setters, etc.
}
Run Code Online (Sandbox Code Playgroud)

我有一个我写的Camel处理器,它将生成一个ValidatedWitches实例(同样由2组成List<Witch>):

public class WitchValidator implements Processor {
    @Override
    public void process(Exchange exchange) {
        List<Witch> witchesToValidate = (List<Witch>)exchange.getIn().getBody();

        ValidatedWitches validated = validate(witchesToValidate);

        exchange.getOut().setBody(validated);
    }

    private ValidatedWitches validate(List<Witch> toValidate) {
        // For each witch, determines if it is a good witch, or a bad witch,
        // and …
Run Code Online (Sandbox Code Playgroud)

java routes choice apache-camel

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

您能以编程方式更改Java嵌入式代理中队列的"死信"处理吗?

背景

在高级别,我有一个Java应用程序,其中某些事件应该触发当前用户采取的某个操作.但是,事件可能非常频繁,并且操作始终相同.因此,当第一个事件发生时,我想在不久的将来安排行动(例如5分钟).在该时间窗口期间,后续事件不应采取任何操作,因为应用程序发现已经安排了一个操作.一旦计划的操作执行,我们将返回步骤1,下一个事件将再次开始循环.

我的想法是通过在应用程序本身内嵌入内存中的ActiveMQ实例来实现这种过滤和限制机制(我不关心队列持久性).

我相信JMS 2.0支持延迟传送的概念,延迟消息位于"暂存队列"中,直到传送到真实目的地为止.但是,我也相信ActiveMQ还不支持JMS 2.0规范......所以我正在考虑模仿生存时间(TTL)值和死信队列(DLQ)处理的相同行为.

基本上,我的消息生成器代码会将消息放在虚拟登台队列上,消费者从中没有任何东西.消息将以5分钟的TTL值放置,并在到期时ActiveMQ将它们转储到DLQ中. 这是我的消息消费者实际消费消息的队列.

我认为我不想实际使用"默认"DLQ,因为我不知道ActiveMQ可能在那里转储哪些与我的应用程序代码完全无关的内部事物.所以我认为我的虚拟登台队列最好有自己的自定义DLQ.我只看过一页讨论DLQ配置的ActiveMQ文档,它只针对独立的ActiveMQ安装(不是嵌入在应用程序中的内存代理)的XML配置文件.

是否可以在运行时以编程方式为嵌入式ActiveMQ实例中的队列配置自定义DLQ?

如果你认为我走错了路,我也有兴趣听听其他建议.我对JMS比AMQP更熟悉,所以我不知道Qpid或其他一些Java嵌入式AMQP代理是否更容易.无论Apache Camel究竟是什么(!),我相信它应该在这类事情上表现出色,但这种学习曲线对于这个用例来说可能是彻底的过度杀伤力.

java multithreading activemq-classic jms apache-camel

6
推荐指数
1
解决办法
623
查看次数