我正在使用tokenizer将文件拆分为行:
.split().tokenize("\n", 1)
Run Code Online (Sandbox Code Playgroud)
但是,我需要处理的一些文件将包含一个标题行,需要对标准行进行不同的处理.有没有一种简单的方法来读取第一行,处理它,然后拆分剩余的行?
对每条路线使用end()是最佳做法吗?
以下作品:
from("jms:some-queue")
.beanRef("bean1", "method1")
.beanRef("bean2", "method2")
Run Code Online (Sandbox Code Playgroud)
这样,
from("jms:some-queue")
.beanRef("bean1", "method1")
.beanRef("bean2", "method2")
.end()
Run Code Online (Sandbox Code Playgroud) 我有以下路线用于演示目的
from("direct:external")
.routeId("external")
.to("http4://www.third-party.com/foo").id("ext");
Run Code Online (Sandbox Code Playgroud)
为了测试,我想*用直接替换http4:端点:端点*在路由末尾添加一个mock:端点进行验证
我添加了以下adviceWithRouteBuilder
context.getRouteDefinition("external").adviceWith(context, new AdviceWithRouteBuilder() {
@Override
public void configure() throws Exception {
weaveAddLast().to("mock:result");
weaveByToUri(".*http4://.*")
.replace()
.to("direct:foo");
}
});
Run Code Online (Sandbox Code Playgroud)
这个似乎工作,但如果我改变weave*语句的顺序,就像这样
public void configure() throws Exception {
weaveByToUri(".*http4://.*")
.replace()
.to("direct:foo");
weaveAddLast().to("mock:result");
}
Run Code Online (Sandbox Code Playgroud)
它给了我以下错误
java.lang.IllegalArgumentException:在路由中没有匹配:*的输出:Route(external)[[From [direct:external]] - > [pipeline - > [[To [direct:foo]]]]]
我实际上希望得到相同的结果,与订单无关.
我正在尝试确定用于集群化ServiceMix 3.3.1/Camel 2.1/AMQ 5.3应用程序的选项.我正在执行高容量消息处理,我需要集群以实现高可用性和水平可伸缩性.
这基本上就是我的应用程序所做的... HTTP-> QUEUE-> PROCESS-> DATABASE-> TOPIC
从( "码头:http://0.0.0.0/inbound ").要(" ActiveMQ的:inboundQueue");
from("activemq:inboundQueue?maxConcurrentConsumers = 50").process(decode()).process(transform()).process(validate()).process(saveToDatabase()).to("activemq:topic:ouboundTopic" );
所以,我已经阅读了所有ServiceMix和AcitveMQ集群页面,但我仍然不确定要走哪条路.
我知道我可以使用HA的主/从设置,但这对可伸缩性没有帮助.
我读过有关经纪人的网络,但我不确定这是如何适用的.例如,如果我在群集中的多个节点上部署相同的Camel路由,它们将如何"完全"交互?如果我将HTTP生成器指向一个节点(NodeA),哪些消息将被发送到NodeB?是否在节点A/B之间共享队列/主题...如果是,如何分割或复制消息?另外,外部客户端如何准确地订阅我的"outboundTopic"(并获取所有消息等)?
或者,我一直在想我应该在多个ServiceMix实例之间共享代理.那将是更清洁的,因为只需要管理一组队列/主题,我可以通过添加更多实例来扩展.但是,现在我受限于单个经纪人的可扩展性,我又回到了单点故障......
如果有人能为我澄清权衡......我会很感激.
那么,谁可以建议一些优秀的Apache Camel路由视觉设计师?
想知道是否有一些非常好的Apache Camel路由可视化器(看到一些maven2驼峰可视化器,但它产生了奇怪的结果).
我在Camel的路径中使用日期:
fileName=${date:now:dd-MM-yyyy}
Run Code Online (Sandbox Code Playgroud)
但我现在需要的是 - 1天.那可能吗?
我需要扩展名最简单的过滤器:fe文件20120523.173227.CustomerMaster05092012.QWERTY.xml route:
<from uri="file://{{fdr.folder.working.url}}&include=*.xml"/>
Run Code Online (Sandbox Code Playgroud)
不起作用:
在索引0附近悬挂元字符'*'
WARN - file://root_folder/working/) [FileConsumer] Consumer Consumer[file://root_folder/working/?delay=1000&delete=true&idempotent=false&include=*.xml&initialDelay=1000&readLock=changed] failed polling endpoint: Endpoint[file://root_folder/working/?delay=1000&delete=true&idempotent=false&include=*.xml&initialDelay=1000&readLock=changed]. Will try again at next poll. Caused by: [java.util.regex.PatternSyntaxException - Dangling meta character '*' near index 0
*.xml
^]
java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0
*.xml
^
at java.util.regex.Pattern.error(Pattern.java:1713)
at java.util.regex.Pattern.sequence(Pattern.java:1878)
at java.util.regex.Pattern.expr(Pattern.java:1752)
at java.util.regex.Pattern.compile(Pattern.java:1460)
at java.util.regex.Pattern.<init>(Pattern.java:1133)
at java.util.regex.Pattern.compile(Pattern.java:823)
at java.util.regex.Pattern.matches(Pattern.java:928)
at java.lang.String.matches(String.java:2090)
at org.apache.camel.component.file.GenericFileConsumer.isMatched(GenericFileConsumer.java:458)
at org.apache.camel.component.file.GenericFileConsumer.isValidFile(GenericFileConsumer.java:395)
at org.apache.camel.component.file.FileConsumer.pollDirectory(FileConsumer.java:94)
at org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:107)
at org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:142)
at org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:92)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
at …Run Code Online (Sandbox Code Playgroud) 希望这听起来并不荒谬,但我怎么能故意丢弃 Camel中的消息呢?
到目前为止,我已将它们发送到Log-Component,但同时我甚至不想记录撤销.
Camel中是否有/ dev/null端点?
Camel in Action书中的生产者和消费者的定义对我来说有点混乱.我已经读过类似问题的其他两个答案,但我仍然觉得不是那样的.
生产者是Camel抽象,它指的是能够创建消息并将消息发送到端点的实体.图1.10说明了生产者适应其他Camel概念的位置.当需要将消息发送到端点时,生产者将创建交换并使用与该特定端点兼容的数据填充它.例如,a
FileProducer会将消息正文写入文件.甲JmsProducer,在另一方面,将映射骆驼消息到javax.jms.Message其发送到JMS目的地之前.这是Camel的一个重要特性,因为它隐藏了与特定传输交互的复杂性.使用者是接收生产者生成的消息的服务,将它们包装在交换中,然后发送它们进行处理.消费者是在Camel中路由交换的来源.回顾图1.10,我们可以看到消费者与其他Camel概念的契合程度.要创建新的交换,消费者将使用包装正在使用的有效负载的端点.然后使用处理器使用路由引擎启动Camel中的交换路由.
谁在实际创建交易所?典型的沟通渠道的哪一方是生产者和消费者?从上面的文字我不能真正说出谁对此负责.如果有人可以提供一张照片(书中的那张照片对我来说还不清楚),那将是很棒的,其中究竟是生产者和消费者,并解释他们如何以简单的方式工作.也许一些例子也会有用.
好吧也许最好举一个例子,有人可以告诉我它是如何工作的.想象一下,我们想要从文件夹中获取文件并将它们放在JMS队列中,然后从那里发送它们以进行进一步处理,最终保存在磁盘上.
根据我的照片,生产者,消费者到底在哪里?我意识到什么是组件和端点.
据我所知,Apache Kafka是异步消息传递平台,Apache Camel是一个实现企业集成模式的平台.
那么,Apache Camel和Apache Kafka的实际差异是什么?我们计划用Apache Camel实现这个系统,这个系统比较容易,但是我们的客户想要Apache Kafka而不是理性的.
选择Apache Kafka实现消息队列功能有什么好处,这也可以用Apache Camel实现?我担心Kafka会给项目带来不必要的开销.我们比较苹果和橘子吗?
我们需要的是简单的API来设置和使用群集消息队列.我们的初始计划是使用Camel在集群JMS或ActiveMQ队列上使用/生成.Kafka如何让这项工作更轻松?无论哪种情况,应用程序本身都可以在WebLogic服务器上运行.
消息传递是点对点类型,其中有多个相同服务的实例在运行,但只有一个实例应该处理消息并根据负载平衡策略发出结果.消息队列也是群集的,因此服务实例或队列实例的故障都不是SPOF.