SOA概念很容易掌握,但我对BPEL和Apache Camel等企业服务集成架构和技术并不熟悉.
我知道BPEL有助于协调服务,而且Camel是企业集成模式的实现.我目前正在阅读着名的企业集成模式书.
但EIP和管弦乐之间的界限对我来说似乎很薄弱.在我看来,Camel还以自己的方式协调服务.此外,Camel提供了许多连接器,因此可以轻松使用不同的协议.
Camel比BPEL更好吗?
或者是否可以使用您无法使用Camel执行的BPEL操作?
哪个?
关于我所阅读的内容,似乎Camel比BPEL更好地协调REST服务:这是真的吗?
我试图围绕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) 我正在寻找一些关于如何集群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
我们已经使用Apache camel作为工作流引擎.首先我们使用WebService One并等待响应并基于响应调用WebService 2或WebService 3.它是一个纯粹的WorkFlow并且有几个像这样的WorkFlow步骤.我的机会较少开发BPM产品,比如JBOSS BPM等.除了长期运行和支持人工任务之外,还有其他任何理由我们必须选择BPM产品吗?如果我们的项目中不需要长时间运行和人工任务支持,我们可以使用Camel或JBOSS FUSE来协调业务流程吗?
谢谢,狮子座.
骆驼路线:
<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)
如何实现这一目标?
您有没有人使用过Camel和IBM的MQ.我们正在考虑可能同时使用这两种产品,但没有两种产品协同工作的例子.
Camel RabbitMQ组件允许设置选项concurrentConsumers和threadPoolSize.他们的描述和默认值如下:
concurrentConsumers- default 1 - 从代理消耗时的并发使用者数.(例如,与JMS组件的相同选项类似).
threadPoolSize- 默认值10 - 使用者使用具有固定线程数的线程池执行程序.此设置允许您设置该线程数.
有人可以解释这两者是如何相互作用的,特别是从表现的角度来看?
特别是,进入细微差别:
threadPoolSize所有并发消费者之间共享的线程或这些线程?非常感谢!
我正在使用Apache Camel SQL批量插入过程.
我的应用程序是从Active MQ读取票据,其中包含大约2000张票据.
我已将批次更新为100.
我要解雇的查询如下:
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)
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)下面是我的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)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)
?
我正在尝试使用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) apache-camel ×10
java ×5
soa ×2
apache ×1
architecture ×1
bindy ×1
bpel ×1
business-process-management ×1
camel-jdbc ×1
camel-sql ×1
esb ×1
failover ×1
fuseesb ×1
ibm-mq ×1
json ×1
rabbitmq ×1
rest ×1
web-services ×1
xml ×1
xml-parsing ×1