我不明白Camel到底是做什么的.
如果你能用101个单词介绍骆驼:
请解释一下Camel是什么.
Gateway和Service Activator作为消息端点(在企业集成模式方面)有什么区别?
入站和出站通道适配器之间的根本区别是什么?
任何例子都会非常有用.
我已经回顾了Spring文档,这种"定向"区别对我来说并不清楚.我支持配置了出站通道适配器的应用程序,但我发现行为计数器直观的出站标签.此适配器获取外部文件,然后将其带入我们解析文件并保留数据的应用程序.
这与此问题类似,但我想更加关注通道适配器,并希望获得更多反馈!
谢谢!
我对 Akka的理解是它提供了一个模型,通过这种模型,多个隔离的线程可以以高度并发的方式相互通信.它使用"actor模型",其中每个线程都是一个具有特定工作的"actor".您可以协调哪些消息在什么条件下传递给哪些actor.
我之前使用过Camel,对我来说,我觉得它现在已经失去了它的光彩/效用,因为Akka是如此成熟和有据可查.据我了解,Camel是关于企业集成的,即将多个不同的系统集成在一起,通常以某种服务总线方式.
但想一想:如果我目前正在使用Camel:
我可以和Akka做同样的事情; 我可以为每个步骤(轮询FTP,转换文件 - > POJO,电子邮件或持久化)拥有1个Actor,将它们连接在一起,让Akka处理所有的异步/并发.
所以尽管Akka是一个并发框架(使用actor),尽管Camel是关于集成的,但我不得不问:Akka不能解决Camel所做的一切吗?换句话说:在Akka上使用Camel仍然存在哪些用例?
我有以下情况:
我启动Camel路线如下:
public class MyMessage implements Runnable {
public void run() {
// omitted here
}
}
from("netty:tcp://localhost:7777?textline=true&sync=false")
... // omitted here: parse message to pojo MyMessage, set header "group-identifier"
.to(seda:process);
Run Code Online (Sandbox Code Playgroud)
此Camel路由使用TCP流,解析每个传入消息的有效负载并将其转换为MyMessagepojo,并group-identifier在交换机上设置与消息对应的标头...
现在我想消费seda:process如下:
run().我想为此提供/定义一个ExecutorService,所以我可以控制线程数.我可以在这里应用哪些企业集成模式?我如何将这些概念映射到Camel?
我了解到ActiveMQ具有消息组的概念(http://activemq.apache.org/message-groups.html).这可能提供一种方法来确保同一组中的两条消息永远不会同时执行.虽然,我不确定仅为此引入ActiveMQ并不是一种矫枉过正.这可以通过'核心'Camel/Java来实现吗?
java architecture concurrency apache-camel enterprise-integration
我想知道是否有任何绘图工具可用于根据EIP映射给定的用例解决方案.有一个可用于MS Visio的模板和一个用于OpenOffice的SVG替代方案.模板中的形状很好,但似乎不是演示文稿的最佳图形.有没有可用于绘制EIP的替代方案?提前致谢.
我目前正在寻找一个好的框架来集成具有不同通信方法的多个系统,例如
在 .NET 应用程序中。对于 Java,似乎有很多可用的选项,但我在 .NET 平台上找不到任何类似的选项。
我有一个第三方应用程序,它将一些消息放入JMS队列.我还有一个应用程序从该队列中读取消息.根据消息类型,我将此消息保存到DB或将其发送到第三方服务.此外,我们不应超过一些固定的每秒呼叫限制,以免超载第三方.
目前,我想到了这个用例的两个解决方案.
第一个是要求第三方发送一些自定义标头,以便JMS使用者能够使用JMS选择器过滤消息.因此,在这种情况下,我们将能够创建两个使用者,第一个将能够读取消息并将其保存到DB,第二个将使用一些限制/轮询机制在特定负载下向第三方发送消息.但是这种方法对我来说不起作用,因为第三方添加这些自定义标题需要很长时间.像Camel这样的东西:
from("jms:queue?selector=firstSelector")
.bean(dbSaver);
from("jms:queue?selector=secondSelector")
.throttle(10)
.bean(httpClient);
Run Code Online (Sandbox Code Playgroud)
第二个是创建另外两个JMS队列和一个将在这些队列之间拆分消息的处理器.然后采用与第一个解决方案相同的逻辑.但是,这意味着应该添加2个额外的JMS队列.在骆驼:
from("jms:parentQueue")
.choice()
.when(body().contains(...))
.to("jms:fistChildQueue")
.otherwise()
.to("jms:secondChildQueue")
.end()
from("jms:fistChildQueue")
.bean(dbSaver);
from("jms:secondChildQueue")
.throttle(10)
.bean(httpClient);
Run Code Online (Sandbox Code Playgroud)
此外,我一直在考虑使用两个内存中队列而不是JMS队列.但是,在这种情况下,如果JMS队列中存在大量消息,我们很容易陷入内存困境.
有人可以建议这个用例的架构设计吗?用Camel Route风格来看它会很棒.
作为一个无关紧要的拙见,我发现apache camel docs太过冒昧,因为假设读者已经有了骆驼的背景.
通常情况下,Web服务提供者是生产者,它生成的服务的客户是消费者.
我们来看看http://camel.apache.org/pojo-producing.html.
其中说,有两种不同的方式向Camel Endpoint发送消息.
@EndpointInjecct (uri ..) ProducerTemplate ...
Run Code Online (Sandbox Code Playgroud)
这是说
嘿我;是一个端点,这是我的uri和模板打我,所以打我
或者,嗯......在清澈湛蓝的天空下,有一个端点有这个uri,这里是模板,我认为我会打它
???
同样,是@Produce和ProducerTemplate
同样,@ Consume,
BTW,@ Produce(uri)或EndpointInjection(uri)中的uri
之间有什么区别
configure {
from (blah blah)
.id(blah)
....
}
Run Code Online (Sandbox Code Playgroud)
和
configure {
from (blah blah)
.routeId(blah)
.. ..
}
Run Code Online (Sandbox Code Playgroud) 我的应用程序需要作为中间件(MW)工作,它从各个客户获得订单(以XML的形式),其中包含--------------优先级1供应商ID,其中客户可以发送XML到这些组件之一
1)JMS queue
2)File system
3)HTTP
4)Web service request(rest/soap)
Run Code Online (Sandbox Code Playgroud)
该MW将首先验证传入请求并将确认发送给通过其首选信道请求订单的客户.传入的XML中存在通道和客户端点信息.
一旦获得订单,它需要通过xml形式的优先通道向不同的供应商发送订单请求.我的数据库中有供应商及其首选渠道信息.
所以它是企业集成的用例.
我计划使用核心Java技术来做到这一点.这是我计划的方法.
将为每种类型的传入请求(JMS队列,文件系统,HTTP,Web服务请求(休息/肥皂))提供四个侦听器/条目端点.这些监听器将把xml字符串放在jms队列中.这将作为接待员工作,并使过程异步.
现在我将拥有将在队列中监听的jms使用者.(消费者可以在同一系统上或根据生产者机器上的负载而与生产者不同).此使用者将xml字符串解析为java对象.执行验证.将确认发送给客户(确认需要根据客户的喜好发送.我将使用确认处理器工厂,它将根据喜好发送确认).验证完成后,将此pojo转换为另一种pojo格式,以便xstream/jaxb进一步将其编组为xml格式,并在其首选通道上发送给供应商(供应商首选项存储在db中),如通过soap,jms,文件请求等.
有些我遇到过这个CAMEL链接http://java.dzone.com/articles/open-source-integration-apache,看起来它提供了完美的解决方案,发现这是企业集成的用例.
专家请建议Camel为此提供正确的解决方案.或者像Spring集成的其他一些企业集成框架,ESB在这种情况下会更加有用.如果有人能指出ESB解决这种用例的资源.这真的很有帮助.
由于时间限制,我无法探索所有解决方案,因此寻找专家建议,以便集中精力于一个.
java esb apache-camel spring-integration enterprise-integration
apache Camel 中的过滤器和选择有什么区别?
from("direct:a")
.choice()
.when(header("foo").isEqualTo("bar"))
.to("direct:b")
.when(header("foo").isEqualTo("cheese"))
.to("direct:c")
.otherwise()
.to("direct:d");
Run Code Online (Sandbox Code Playgroud) apache-camel ×9
java ×7
concurrency ×2
esb ×2
soa ×2
.net ×1
akka ×1
architecture ×1
jboss ×1
jms ×1
spring ×1
throttling ×1