幂等

apache camel Idempotent

Apache camel

基于规则路由和处理的引擎,提供企业集成的java对象的实现,通过应用程序接口或DSL(domain-specific languages)来配置路由和处理规则,从一个from源头得到数据,通过process处理,再发到一个to目的地;

  • CamelContext
  • RouteBuilder
  • configure(){from().process(Processor).to();}
  • from to 称为endPoint控制端点
  • Tools for Apache Camel”可以图形化Apache Camel的规则编排过程。
  • Enterprise Integration Patterns:企业集成模式
  • endpoint都是通过URI格式进行描述的
Exchange和Message

Exchange,帮助开发人员在控制端点到处理器、处理器到处理器的路由过程中完成消息的统一描述,包含:ExchangeId, fromEndpoint, properties, pattern, Exception,
Message:是Exchange中的属性,inMessage和outMessage,每一个message对象包含四个属性:MessageID、Header、Body和Attachment。

Processor处理器最主要的工作是进行业务数据格式的转化和中间数据的临时存储,Endpoint一般用来处理业务逻辑、建立数据库连接、建立RPC等;

#####Camel路由规则

Service的start和stop方法控制服务的生命周期;
CamelContext横跨了Camel服务的整个生命周期,并且为Camel服务的工作环境提供支撑。

参考 : http://blog.csdn.net/yinwenjie/article/details/51818352

幂等支持

camel使用IdempotentConsumer类 。根据某个消息ID,到RedisIdempotentRepository 仓储中寻找这个ID,如果存在表示被消费过,否则加入。Redis这里作为消息的存储。
http://www.jdon.com/repository/camelredis.html
http://coderec.cn/2016/05/12/Apache-Camel-%E8%B7%AF%E7%94%B1%E6%B6%88%E6%81%AF%E6%97%B6%E5%8E%BB%E9%87%8D/
配置:

1
2
3
4
5
6
7
8
9
10
11
<bean id="idempotentRepository" class="org.apache.camel.component.redis.processor.idempotent.RedisIdempotentRepository">
<constructor-arg value="test-repo"/>
</bean>
<route>
<from uri="direct:start"/>
<idempotentConsumer messageIdRepositoryRef="idempotentRepository">
<simple>${in.body.id}</simple>
<to uri="mock:result"/>
</idempotentConsumer>
</route>