标签: apache-camel

Camel和BPEL之间的差异

SOA概念很容易掌握,但我对BPEL和Apache Camel等企业服务集成架构和技术并不熟悉.

我知道BPEL有助于协调服务,而且Camel是企业集成模式的实现.我目前正在阅读着名的企业集成模式书.

但EIP和管弦乐之间的界限对我来说似乎很薄弱.在我看来,Camel还以自己的方式协调服务.此外,Camel提供了许多连接器,因此可以轻松使用不同的协议.

Camel比BPEL更好吗?
或者是否可以使用您无法使用Camel执行的BPEL操作?
哪个?
关于我所阅读的内容,似乎Camel比BPEL更好地协调REST服务:这是真的吗?

rest soa web-services bpel apache-camel

9
推荐指数
2
解决办法
3553
查看次数

如何打包/部署ESB?

我试图围绕Apache Camel,这似乎是一个轻量级的ESB.如果我正确理解Camel/ESB,那么您可以将Camel Route视为节点和边的图形.每个节点都是路由上的端点(可以使用/生成消息).每条边是两个不同端点(1个生产者和1个消费者)之间的路径.

假设这是正确的,我有一个实际的问题:最佳实践是如何规定部署应用程序的ESB/Camel Route的?我应该将其打包为自己的JAR,还是值得成为自己的充满EJB,Web服务和其他JAR的EAR?

我想我是在询问如何部署/构建Camel Route或ESB,例如:

my-esb.ear/
    ejb1.jar/
        MyEJB_1.class
    ejb2.jar/
        MyEJB_2.class
    webservice.war/
        MyWebService.class
Run Code Online (Sandbox Code Playgroud)

要么...

my-esb.jar/
    MyEJB_1.class
    MyEJB_2.class
    MyWebService.class
Run Code Online (Sandbox Code Playgroud)

java architecture soa esb apache-camel

9
推荐指数
1
解决办法
3481
查看次数

我如何集群ServiceMix?

我正在寻找一些关于如何集群ServiceMix解决方案的初始指针.基本上我需要的是:

  • 有2个(或更多)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

9
推荐指数
1
解决办法
4077
查看次数

Camel与BPM的工作流程

我们已经使用Apache camel作为工作流引擎.首先我们使用WebService One并等待响应并基于响应调用WebService 2或WebService 3.它是一个纯粹的WorkFlow并且有几个像这样的WorkFlow步骤.我的机会较少开发BPM产品,比如JBOSS BPM等.除了长期运行和支持人工任务之外,还有其他任何理由我们必须选择BPM产品吗?如果我们的项目中不需要长时间运行和人工任务支持,我们可以使用Camel或JBOSS FUSE来协调业务流程吗?

谢谢,狮子座.

business-process-management apache-camel fuseesb

9
推荐指数
2
解决办法
8657
查看次数

Apache Camel xmljson中的自定义JSON输出

骆驼路线:

<camelContext xmlns="http://camel.apache.org/schema/spring">

   <dataFormats>
    <xmljson id="xmljson" />
   </dataFormats>

    <route id="route1">
        <from uri="file:C:/Users/User1/InputXML"/>
        <to uri="activemq:queue:MyThread1"/>        
    </route>

    <route id="route2">
        <from uri="activemq:queue:MyThread1"/>    
        <marshal ref="xmljson"/> 
        <bean ref="com.test.OutputProcessor"/>
    </route> 
</camelContext>
Run Code Online (Sandbox Code Playgroud)

输入XML:

<?xml version="1.0" encoding="UTF-8"?>
<Message>
  <to> Tove</to>
 <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</Message>
Run Code Online (Sandbox Code Playgroud)

实际产量:

{"to":" Tove","from":"Jani","heading":"Reminder","body":"Don't forget me this weekend!"}
Run Code Online (Sandbox Code Playgroud)

我想自定义此输出.我想为转换后的json添加一些mote属性.例如,我希望输出json为

  {
    "inputs":[  
                { 
            "inputname":"to",
            "inputValue":"Tove"
            },
            { 
            "inputname":"from",
            "inputValue":"jani"
            },
            { 
            "inputname":"heading",
            "inputValue":"Reminder"
            },
            { 
            "inputname":"body",
            "inputValue":"Don't forget me this weekend!"
            }
        ]
    }
Run Code Online (Sandbox Code Playgroud)

如何实现这一目标?

xml json apache-camel xml-parsing

9
推荐指数
1
解决办法
1272
查看次数

带有IBM MQ的Apache Camel

您有没有人使用过Camel和IBM的MQ.我们正在考虑可能同时使用这两种产品,但没有两种产品协同工作的例子.

apache apache-camel ibm-mq

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

Camel RabbitMQ使用者:concurrentConsumers和threadPoolSize选项之间的交互是什么?

Camel RabbitMQ组件允许设置选项concurrentConsumersthreadPoolSize.他们的描述和默认值如下:

concurrentConsumers - default 1 - 从代理消耗时的并发使用者数.(例如,与JMS组件的相同选项类似).

threadPoolSize - 默认值10 - 使用者使用具有固定线程数的线程池执行程序.此设置允许您设置该线程数.

有人可以解释这两者是如何相互作用的,特别是从表现的角度来看?

特别是,进入细微差别:

  1. 它们大致可以互换吗?也就是说,2个消费者,5个线程~5个消费者,2个线程大致是真的吗?
  2. 每个并发消费者是否获得了threadPoolSize所有并发消费者之间共享的线程或这些线程?

非常感谢!

java configuration multithreading apache-camel rabbitmq

9
推荐指数
2
解决办法
1878
查看次数

Apache Camel SQL批量插入需要很长时间

我正在使用Apache Camel SQL批量插入过程.

  1. 我的应用程序是从Active MQ读取票据,其中包含大约2000张票据.

  2. 我已将批次更新为100.

  3. 我要解雇的查询如下:

    sql.subs.insertCdr= insert into subscription_logs(master_id,request_type,req_desc,msisdn,amount,status,resp_code,resp_desc,channel,transaction_id,se_mode,be_mode,sub_type,sub_timeleft,srv_name,srv_id,start_date,end_date,operator,circle,country,time_offset,retry_count,user_status,previous_state,se_reqrecvtime,se_respsenttime,be_reqsenttime,be_resprecvtime,cp_id,cp_name,sub_srvname,sub_srvid,msg_senderid,msg_text,call_back_url,call_back_resp,client_ip,se_sysIp,language,cp_callbackurlhittime,action,alert,notification_url,notification_resp) values(:#masterId, :#requestType,:#reqDesc,:#msisdnCdr,:#price,:#status,:#responseCode,:#reason,:#channel,:#transactionId,:#seMode,:#beMode,:#subType,:#subTimeLeft,:#serviceName,:#serviceId,:#subStartDate,:#cdrEndDate,:#operator,:#circle,:#country,:#timeOffset,:#retryCount,:#userStatus,:#previousState,:#seReqRecvTime,:#seRespSentTime,:#beReqSentTime,:#beRespRecvTime,:#cpId,:#cpName,:#subServiceName,:#subServiceId,:#shortCode,:#message,:#callBackUrl,:#callBackResp,:#clientIp,:#seSysIp,:#language,:#cpCallbackUrlHitTime,:#action,:#alert,:#notificationUrl,:#notificationResponse)

  4. SQL批处理路由定义如下:

    <pipeline>
       <log message="Going to insert in database"></log>
       <transform>
          <method ref="insertionBean" method="subsBatchInsertion"></method>
       </transform>
       <choice>
           <when>
               <simple>${in.header.subsCount} == ${properties:batch.size}</simple>
               <to uri="sql:{{sql.subs.insertCdr}}?batch=true"></to>
               <log message="Inserted rows ${body}"></log>
           </when>
       </choice>
    </pipeline>
    
    Run Code Online (Sandbox Code Playgroud)
  5. 下面是我的java代码:

    public List<Map<String, Object>> subsBatchInsertion(Exchange exchange) {
    if (subsBatchCounter > batchSize) {
        subsPayLoad.clear();
        subsBatchCounter = 1;
    }
    subsPayLoad.add(generateInsert(exchange.getIn().getBody(SubscriptionCdr.class)));
    exchange.getIn().setHeader("subsCount", subsBatchCounter);
    subsBatchCounter++;
    return subsPayLoad;
    }
    
    public Map<String, Object> generateInsert(Cdr cdr) {
    Map<String, Object> insert = new HashMap<String, Object>();
    try {
        insert …
    Run Code Online (Sandbox Code Playgroud)

java apache-camel batch-processing camel-jdbc camel-sql

9
推荐指数
1
解决办法
876
查看次数

Apache Camel和Intellij Idea代码格式

Intellij Idea在camel路由中格式化代码,如下所示:

from("direct:loop")
     .log("Loop: ${header[loopCount]}")
     .choice()
     .when(simple("header[loopCount] < 10"))
     .process(exchange -> {
         Message in = exchange.getIn();
         in.setHeader("loopCount", in.getHeader("loopCount", Integer.class) + 1);
     })
     .to("direct:loop")
     .otherwise()
     .log("Exiting loop")
     .end();
Run Code Online (Sandbox Code Playgroud)

是否有任何插件或其他方法可以这样做:

from("direct:loop")
 .log("Loop: ${header[loopCount]}")
 .choice()
     .when(simple("header[loopCount] < 10"))
         .process(exchange -> {
             Message in = exchange.getIn();
             in.setHeader("loopCount", in.getHeader("loopCount", Integer.class) + 1);
         })
         .to("direct:loop")
     .otherwise()
         .log("Exiting loop")
 .end();
Run Code Online (Sandbox Code Playgroud)

java intellij-idea apache-camel

9
推荐指数
2
解决办法
1149
查看次数

java.lang.IllegalArgumentException:缺少某些字段(可选或必需)

我正在尝试使用Apache Camel Bindy创建一个固定文件阅读器,但我得到了异常.请帮助我找到解决方案.没有页眉和页脚,这是运行良好.

更新: 文件很小,现在可以理解并添加公共

文件内容:

101-08-2009
30A9
20A9
60A9
40A9
10A9
50A8
9000000002
Run Code Online (Sandbox Code Playgroud)

新例外:

java.lang.IllegalArgumentException: Some fields are missing (optional or mandatory), line: 2
    at org.apache.camel.dataformat.bindy.BindyFixedLengthFactory.bind(BindyFixedLengthFactory.java:295) ~[camel-bindy-2.19.1.jar:2.19.1]
    at org.apache.camel.dataformat.bindy.fixed.BindyFixedLengthDataFormat.createModel(BindyFixedLengthDataFormat.java:294) ~[camel-bindy-2.19.1.jar:2.19.1]
Run Code Online (Sandbox Code Playgroud)

例外:

org.apache.camel.RuntimeCamelException: java.lang.IllegalAccessException: Class org.apache.camel.util.ObjectHelper can not access a member of class com.camel.examples.OrderHeader with modifiers ""
    at org.apache.camel.util.ObjectHelper.newInstance(ObjectHelper.java:1686) ~[camel-core-2.19.1.jar:2.19.1]
Run Code Online (Sandbox Code Playgroud)

路由器:

// @Override
    public void configure() throws Exception {
        Comparator<Order> comparator = new Comparator<Order>() {
            @Override
            public int compare(Order o1, Order o2) {
                return o1.getOrderNr() - o2.getOrderNr();
            }
        };

       DataFormat …
Run Code Online (Sandbox Code Playgroud)

java apache-camel bindy

9
推荐指数
1
解决办法
671
查看次数