嘿,
如果我们有Apache Camel为什么要使用Apache ServiceMix和Mule等其他解决方案?
Apache Camel与这些产品相比无法做到吗?
何时使用Mule/ServiceMix以及何时使用Camel?
我是新来的消息和想知道的区别ActiveMQ,Mule,ServiceMix和Camel
任何人都知道这些产品是如何不同的?
提前致谢 !
编辑:也想知道任何好的地方/资源来学习这些东西.
java messaging activemq-classic apache-camel apache-servicemix
我正在考虑将ESB集成到现有的基于Java/Maven Web的产品中.具体来说,我正在寻找ServiceMix和Mule.该产品将连接到多种不同的服务,包括电子邮件,Quartz,基于HTTP的RESTful Web服务,SMS和IM.我只是快速浏览了一下文档,这两个选项似乎相当重要且相当复杂.这似乎是何时使用ESB的教科书示例,但我不想花费大量时间来学习一个或另一个系统.
就像我说的,我已经有了一个由Maven构建的Web应用程序,并希望集成其中一个系统相当简单,即使只是为了发送电子邮件这么简单的事情,但看起来添加任何一个都将拉入世界的一半罐子的条款,很难嵌入现有的产品.
是否值得尝试引入其中一个选项?是否有一种简单的方法可以将它们集成到现有应用程序中而无需完全重组?还有其他更轻的重量选择吗?是否有一些方面我应该考虑使它们的使用值得?
是否有人使用Karaf而不是Servicemix?如果是这样,你是怎么做出这个决定的?我知道Servicemix在Karaf附近添加了一层功能,只是好奇Karaf是否自己使用以及为什么......
我正在学习ActiveMQ和Camel,目标是创建一个像这样工作的小原型系统:
alt text http://www.paulstovell.com/get/stackoverflow-questions/Queues.png(big )
当订单放入订单系统时,会向任何订户(发布/订阅系统)发送消息,他们可以在处理订单时发挥作用.该订单,航运和进销存应用程序都有自己的ActiveMQ安装,因此,如果任何三个系统都处于离线状态,其他人可以继续工作.有些东西负责在ActiveMQ安装之间移动消息.
如果Apache Camel位于同一个ActiveMQ实例上,那么让Apache Camel通过路由将消息从一个队列移动到另一个队列非常容易.所以这适用于管理订阅队列.
接下来的挑战是将消息从一个ActiveMQ实例推送到另一个实例,这就是我不确定接下来要看什么的位置.
从Apache ServiceMix开始的权威指南是什么?网站上的指南和指南太简单了,无法开始.
我正在寻找一些关于如何集群ServiceMix解决方案的初始指针.基本上我需要的是:
从那以后,搜索信息让我很困惑
我的解决方案可能会有一些使用JMS队列相互通信的bundle.在这种情况下,我应该只有2个独立的ServiceMix实例(彼此不了解).这不是最简单的选择吗?我看到了对故障转移配置的一些支持(http://servicemix.apache.org/docs/4.5.x/users-guide/failover.html),但真正给予的好处是什么(我错过了什么)?此故障转移配置也无助于负载平衡,因为只有一个实例正在为请求提供服务.
failover load-balancing high-availability apache-camel apache-servicemix
在旧版本4.5.2中使用cxf 2.6.8的较新版本的servicemix(在5.4 - cxf 3.0.2和5.3 - cxf 2.7.11上测试)中出现此问题,一切正常,Web服务已创建.
在我们的项目中,我们有很多不同的web服务由maven插件wsdl2java在不同的包中生成.在servicemix 5.4中,几乎所有的web服务都由于这些错误而中断,奇怪的是在之前的servicemix 5.3中,bundle之一能够在没有任何项目修改的情况下启动.
在maven我尝试使用额外的extraarg:
<extraarg>-autoNameResolution</extraarg>
<extraarg>-xjc-npa</extraarg>
Run Code Online (Sandbox Code Playgroud)
但没有任何结果
堆栈跟踪:
Unable to start blueprint container for bundle bundle-name1
org.osgi.service.blueprint.container.ComponentDefinitionException: Unable to initialize bean .camelBlueprint.factory.camelContext
at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:714)[19:org.apache.aries.blueprint.core:1.4.1]
at org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:824)[19:org.apache.aries.blueprint.core:1.4.1]
at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:787)[19:org.apache.aries.blueprint.core:1.4.1]
at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:79)[19:org.apache.aries.blueprint.core:1.4.1]
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)[:1.7.0_21]
at java.util.concurrent.FutureTask.run(FutureTask.java:166)[:1.7.0_21]
at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:88)[19:org.apache.aries.blueprint.core:1.4.1]
at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:245)[19:org.apache.aries.blueprint.core:1.4.1]
at org.apache.aries.blueprint.container.BlueprintRepository.createInstance(BlueprintRepository.java:230)[19:org.apache.aries.blueprint.core:1.4.1]
at org.apache.aries.blueprint.container.BlueprintRepository.create(BlueprintRepository.java:145)[19:org.apache.aries.blueprint.core:1.4.1]
at org.apache.aries.blueprint.container.BlueprintContainerImpl.getComponentInstance(BlueprintContainerImpl.java:753)[19:org.apache.aries.blueprint.core:1.4.1]
at org.apache.camel.blueprint.handler.CamelNamespaceHandler$CamelDependenciesFinder.process(CamelNamespaceHandler.java:863)[105:org.apache.camel.camel-blueprint:2.13.2]
at org.apache.aries.blueprint.container.BlueprintContainerImpl.processProcessors(BlueprintContainerImpl.java:528)[19:org.apache.aries.blueprint.core:1.4.1]
at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:361)[19:org.apache.aries.blueprint.core:1.4.1]
at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:269)[19:org.apache.aries.blueprint.core:1.4.1]
at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:276)[19:org.apache.aries.blueprint.core:1.4.1]
at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:245)[19:org.apache.aries.blueprint.core:1.4.1]
at org.apache.aries.blueprint.container.BlueprintExtender.modifiedBundle(BlueprintExtender.java:235)[19:org.apache.aries.blueprint.core:1.4.1]
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:500)[14:org.apache.aries.util:1.1.0]
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:433)[14:org.apache.aries.util:1.1.0]
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$AbstractTracked.track(BundleHookBundleTracker.java:725)[14:org.apache.aries.util:1.1.0]
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.bundleChanged(BundleHookBundleTracker.java:463)[14:org.apache.aries.util:1.1.0]
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$BundleEventHook.event(BundleHookBundleTracker.java:422)[14:org.apache.aries.util:1.1.0]
at org.apache.felix.framework.util.SecureAction.invokeBundleEventHook(SecureAction.java:1127)[org.apache.felix.framework-4.4.1.jar:]
at org.apache.felix.framework.util.EventDispatcher.createWhitelistFromHooks(EventDispatcher.java:696)[org.apache.felix.framework-4.4.1.jar:] …Run Code Online (Sandbox Code Playgroud) 我正在快速回顾一下ESB,到目前为止,我对Talend ESB感到惊讶和印象深刻.我真的期待Mule,一个更公认的开源esb,成为事实.
在我仅进行学术和基础测试评估之后,有没有更多有Talend实践经验的人(最好是在使用其他开源ESB之后)提供任何优点/缺点?
令我印象深刻的领域是:*EAI,即可用于集成的组件/传输数量.我发现其他一些ESB更多的是"你可以通过使用Camel或其他库来获得该功能",但是在设置这些"外部可用"功能时却没有提供简单的集成/指导.
*作为单点服务总线的安全性.看来Talend为管理所有公开的SOA服务的安全性提供了很好的支持.我没有机会在实践环境中完全尝试它(再次,有更多经验的人请!),但ESB为您提供完整(在运行期间可管理)安全控制的想法很有吸引力.
*非常好的契约优先IDE支持创建服务,然后由ESB使用.再次,请诚实的反馈.
*我对部署方面有点担心,听起来你需要运行多个服务器/服务,而ESB解决方案的"部署"(存储库的东西......?)可能会导致多点部署.此外,当转移服务地点(开发/测试/生产)时,我的快速审查并不是那么清楚(特别是与其他ESB解决方案相比......如果它们都有点复杂,那就没问题).
*诸如契约优先Web服务之类的用例,可以聚合/组合/重新映射来自多个其他Web服务(可能是二进制java rmi或ejbremote)的信息以填充响应.
*使用诸如监视ftp服务器的文件丢弃,拾取文件,解析xml/csv/edi文件格式以提供给另一个服务(不一定是大批量处理)的用例
*用于监控RSS提要的用例,用于包含XML/CSV/EDI文件链接,下载(新)文件,处理/提供给其他服务的新条目.
*CIFS/Windows共享我没有查看,但我也会在这里询问监控文件的位置/提取.
问题:有Talend ESB经验的人,请提供有关真实世界准确性和/或陷阱的上述陈述的评论,以及更多真实世界的反馈.就像我上面提到的那样,从表面上看,我真的被Talend Open Studio免费提供的开源作为开源,但在没有许可的情况下可以在商业环境中使用,说实话,JbossESB和Mule在放入时有点失望在Talend ESB旁边.
感谢您的任何反馈!
我熟悉Camel-SMPP,它对我的消费者和生产者路线也很有用.我正在使用Selenium SMPP SIM来测试它.
来自uri ="smpp://smppclient@127.0.0.1:8056?password = password&systemType = consumer"/>
to uri ="smpp:// smppclient @ localhost:2775?password = password && systemType = producer"/>
但是,我想让我的Camel作为服务器运行(它接受来自众多客户的SMS).我当前的From路由与一个SMS发送器紧密耦合.如何将其修改为通用服务器.骆驼有可能吗?