标签: enterprise-integration

Apache Camel究竟是什么?

我不明白Camel到底是做什么的.

如果你能用101个单词介绍骆驼:

  • 究竟是什么?
  • 它如何与用Java编写的应用程序交互?
  • 它与服务器一起出现了什么?
  • 这是一个独立的计划吗?

请解释一下Camel是什么.

java soa apache-camel enterprise-integration

1310
推荐指数
21
解决办法
54万
查看次数

Gateway和Service Activator有什么区别?

Gateway和Service Activator作为消息端点(在企业集成模式方面)有什么区别?

spring-integration enterprise-integration

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

Spring集成 - 入站和出站通道适配器

入站和出站通道适配器之间的根本区别是什么?

任何例子都会非常有用.

我已经回顾了Spring文档,这种"定向"区别对我来说并不清楚.我支持配置了出站通道适配器的应用程序,但我发现行为计数器直观的出站标签.此适配器获取外部文件,然后将其带入我们解析文件并保留数据的应用程序.

这与问题类似,但我想更加关注通道适配器,并希望获得更多反馈!

谢谢!

java spring spring-integration enterprise-integration

15
推荐指数
2
解决办法
8360
查看次数

Akka是否淘汰Camel?

Akka的理解是它提供了一个模型,通过这种模型,多个隔离的线程可以以高度并发的方式相互通信.它使用"actor模型",其中每个线程都是一个具有特定工作的"actor".您可以协调哪些消息在什么条件下传递给哪些actor.

我之前使用过Camel,对我来说,我觉得它现在已经失去了它的光彩/效用,因为Akka是如此成熟和有据可查.据我了解,Camel是关于企业集成的,即将多个不同的系统集成在一起,通常以某种服务总线方式.

但想一想:如果我目前正在使用Camel:

  • 轮询FTP服务器获取文件,一旦找到...
  • 将该文件的内容转换为POJO,然后......
  • 如果POJO具有某种状态,则发送电子邮件,或
  • 在所有其他情况下,将POJO保留在数据库中

我可以和Akka做同样的事情; 我可以为每个步骤(轮询FTP,转换文件 - > POJO,电子邮件或持久化)拥有1个Actor,将它们连接在一起,让Akka处理所有的异步/并发.

所以尽管Akka是一个并发框架(使用actor),尽管Camel是关于集成的,但我不得不问:Akka不能解决Camel所做的一切吗?换句话说:在Akka上使用Camel仍然存在哪些用例?

concurrency apache-camel akka enterprise-integration

14
推荐指数
1
解决办法
5183
查看次数

EIP/Apache Camel - 如何同时处理消息,但每个组原子地处理?

我有以下情况:

  • 有固定数量的组.
  • 有一个传入消息的TCP流.每条消息都与一个组完全相关.

我启动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

8
推荐指数
1
解决办法
200
查看次数

企业集成模式解决方案绘图工具

我想知道是否有任何绘图工具可用于根据EIP映射给定的用例解决方案.有一个可用于MS Visio的模板和一个用于OpenOffice的SVG替代方案.模板中的形状很好,但似乎不是演示文稿的最佳图形.有没有可用于绘制EIP的替代方案?提前致谢.

soa esb apache-camel enterprise-integration

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

集成框架.NET,如camel/spring 集成

我目前正在寻找一个好的框架来集成具有不同通信方法的多个系统,例如

  • FTP
  • 邮件
  • 队列
  • 网络服务

在 .NET 应用程序中。对于 Java,似乎有很多可用的选项,但我在 .NET 平台上找不到任何类似的选项。

.net enterprise-integration

5
推荐指数
1
解决办法
4591
查看次数

JMS队列拆分.企业整合.Apache Camel

我有一个第三方应用程序,它将一些消息放入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风格来看它会很棒.

java throttling jms apache-camel enterprise-integration

5
推荐指数
1
解决办法
299
查看次数

在Camel @Produce中产生了什么,而@Consume消耗了什么?

作为一个无关紧要的拙见,我发现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

  • 我送这个uri吗?
  • 或者在这个uri下接受?

java apache-camel enterprise-integration

5
推荐指数
1
解决办法
509
查看次数

3
推荐指数
2
解决办法
1625
查看次数

CAMEL或其他企业集成框架是否更适合此用例?

我的应用程序需要作为中间件(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

0
推荐指数
1
解决办法
334
查看次数

骆驼过滤器和选择之间的区别

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)

jboss apache-camel enterprise-integration

0
推荐指数
1
解决办法
2070
查看次数