[Camel Basics]
Define routes:
Either using Spring xml or Java DSL.
Spring xml:
<camelContext>
<routeBuilder ref="myBuilder" /> //to load the Java DSL routes defined in MyRouteBuilder class
<routeContextRef> //to load the routes in <routeContext> defined in other xml file
<route>
<from> <process> <to>
</route>
</....>
<bean id="myBuilder" class="org.apache.camel.spring.example.test1.MyRouteBuilder"/>
Java DSL:
extends RouteBuilder, implement the abstract method configure().
@Override
public void configure() throws Exception {
Endpoint orderUpdates = endpoint("pubsub://batman-order-updates");
from("pubsub://adv-updates").process(galaxyAdvCache.input(header(Ref.INBOX)));
}
Apache Camel Test
In the separate integration module:
main/java: BGIntegration.java[RouteBuilder]
main/resources: integration-b-g.xml(Only used to include the java DSL route in BGIntegration into Camel context).
test/java: BMock.java[RouteBuilder], GMock.java[RouteBuilder], BGIntegrationTest.java
test/resources: mock-b-g.xml
Only the BGIntegration.java is used for the tests in test project, all the other 3 are for unit test.
In BGIntegration:
matcher.request("b://pubsub://b-order-updates").uniqueCorrelationId(orderId())
.reply("g:pubsub://tibrv-incoming-suggestion").size(1).correlationId(gSourceOrderID())
.timeout(10000)
.enrich(inheritInbox)
.to("g:first-matched-suggestion");
In BGIntegrationTest:
@Produce(context = "b", uri = "direct://mock-order")
private ProducerTemplate bOrderTemplate; //用于给b提供原始order
@Produce(context = "g", uri = "direct://mock-order") //用于给g提供原始msg
private ProducerTemplate gOrderTemplate;
bOrderTemplate.sendBodyAndHeader(bOrder(orderId), Ref.INBOX, ref.id()); //bOrder和gOrder都是新构建的,只需set好用于match的field即可。
gOrderTemplate.sendBodyAndHeader(gOrder, Ref.INBOX, ref.id());
In BMock:
from("direct://mock-order").to(report.request(orderLabel())
.in(content(OrderDataContract.class)), endpoint("pubsub://b-order-updates"));
//从direct://mock-order把order传给真正route里的b://pubsub://b-order-updates。
In GMock:
Samilar route from direct://mock-order to g:pubsub://tibrv-incoming-suggestion.
Another route from g:first-matched-suggestion to mock://matched-suggestion. mock component会存储msg来做future assertions.
Back to BGIntegrationTest:
@EndpointInject(context = "g", uri = "mock://matched-suggestion")
MockEndpoint matchedOrderMock;
matchedOrderMock.reset();
matchedOrderMock.expectedBodiesReceived(galaxyOrder); //Mock的测试条件
在往初始endpoint produce完msg以后,最后要测试matcher是否将两个msg match成功并存入mock://matched-suggestion.
matchedOrderMock.assertIsSatisfied();
http://camel.apache.org/testing.html
Mock component: 声明期待,确认期待是否满足。期待包括:msg count, msg payload, msg header, msgs order...
The Mock component provides a powerful declarative testing mechanism, which is similar to jMock in that it allows declarative expectations to be created on any Mock endpoint before a test begins. Then the test is run, which typically fires messages to one or more endpoints, and finally the expectations can be asserted in a test case to ensure the system worked as expected.
Remember that Mock is designed for testing. When you add Mock endpoints to a route, each Exchange sent to the endpoint will be stored (to allow for later validation) in memory until explicitly reset or the JVM is restarted.
The following annotations is supported and inject by Camel's CamelBeanPostProcessor
|
Annotation |
Description |
|---|---|
|
|
To inject an endpoint, see more details at POJO Producing. |
|
|
Camel 2.13: To inject a bean obtained from the Registry. See Bean Injection. |
|
|
Camel 2.12: To inject a value using property placeholder. |
|
|
To inject a producer to send message to an endpoint. See POJO Producing. |
|
|
To inject a consumer on a method. See POJO Consuming. |
[Camel Basics]的更多相关文章
- Assembler : The Basics In Reversing
Assembler : The Basics In Reversing Indeed: the basics!! This is all far from complete but covers ab ...
- Camel运行原理分析
Camel运行原理分析 以一个简单的例子说明一下camel的运行原理,例子本身很简单,目的就是将一个目录下的文件搬运到另一个文件夹,处理器只是将文件(限于文本文件)的内容打印到控制台,首先代码如下: ...
- The Basics of 3D Printing in 2015 - from someone with 16 WHOLE HOURS' experience
全文转载自 Scott Hanselman的博文. I bought a 3D printer on Friday, specifically a Printrbot Simple Metal fro ...
- Cadence UVM基础视频介绍(UVM SV Basics)
Cadence关于UVM的简单介绍,包括UVM的各个方面.有中文和英文两种版本. UVM SV Basics 1 – Introduction UVM SV Basics 2 – DUT Exampl ...
- C basics
C 日记目录 C basics ................ writing Numeration storage , structor space assigning pointer, a ...
- Xperf Basics: Recording a Trace(转)
http://randomascii.wordpress.com/2011/08/18/xperf-basics-recording-a-trace/ This post is obsolete ...
- Xperf Analysis Basics(转)
FQ不易,转载 http://randomascii.wordpress.com/2011/08/23/xperf-analysis-basics/ I started writing a des ...
- Radio Basics for RFID
Radio Basics for RFID The following is excerpted from Chapter 3: Radio Basics for UHF RFID from the ...
- 【IOS笔记】View Controller Basics
View Controller Basics 视图控制器基础 Apps running on iOS–based devices have a limited amount of screen s ...
随机推荐
- Maven基础知识和环境搭建
基本概念和生命周期 Maven是现在流行的构建自动化工具,提供了软件构建过程中全生命周期的管理. 基础目录结构 基础目录结构如下: 根目录:存放pom.xml 和所有的子目录 ${basedir}/s ...
- hdu5882 Balanced Game
题目链接:hdu5882 Balanced Game 题解:每种手势的攻防数一样,不难想到n为奇数时游戏平衡. #include<cstdio> #include<cstring&g ...
- JSONP的学习(收集整理)
JSONP和JSON之间有什么联系吗? JSON(JavaScript Object Notation) 是一种轻量级.可读的基于文本的的数据交换格式.,是一种轻量的数据交换开放标准.源于JavsSc ...
- BZOJ1932 [Shoi2007]Setstack 集合堆栈机
妈呀...clj大爷太强啦! 原来还有set_union和set_intersection这种东西... 于是只要把栈顶的每个元素hash一下记录到一个vector里去就好了 /*********** ...
- BZOJ1066 [SCOI2007]蜥蜴
首先...这是道(很水的)网络流 我们发现"每个时刻不能有两个蜥蜴在同一个柱子上"这个条件是没有用的因为可以让外面的先跳,再让里面的往外跳 但是还有柱子高度的限制,于是把柱子拆点为 ...
- WCF服务编程中使用SvcMap实现类型共享等技巧【转】
原文链接:http://www.cr173.com/html/19026_1.html 国外的一篇文章:Sharing DataContracts between WCF Services 文中提到的 ...
- iOS 文件读写
#import <Foundation/Foundation.h> @interface Utils : NSObject +(void) writeFile:(NSString *) f ...
- Oracle性能调优
这部分目前主要是从网上搜集来的,后续要在实践中慢慢体会. v$sqltext: 存储的是被分割的sql v$sqlarea: 存储的是完整的sql和一些统计信息,比如累计的执行次数.逻辑读.物理读等( ...
- JSONObject put,accumulate,element的区别(转载)
原文链接:http://ljhzzyx.blog.163.com/blog/static/3838031220126810430157/ public Object put (Object key ...
- sql遍历树
oracle有直接的sql来遍历一颗树的子节点和父节点 遍历一个节点的所有子节点(classid的值就是该节点的值) select * from organization_ a start with ...