//处理Bean
import java.io.ByteArrayInputStream;
import java.util.Date;
import java.util.Map;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
public class TestBean {
public TestBean(){
super();
}
public String showBody(Exchange exchange) throws Exception {
System.out.println("\r\n\r\n");
Message in=exchange.getIn();
byte []bs=read((ByteArrayInputStream)in.getBody());
String msg=new String(bs,"utf-8");
System.out.println("showBody-->"+msg);
return msg;
}
private byte[] read(ByteArrayInputStream in){
int len=in.available();
byte []data=new byte[len];
in.read(data,0,data.length);
return data;
}
public void showHeads(Map<String, Object> h){
System.out.println("\r\n\r\n");
System.out.println("showHeads--> heads="+h);
}
public Request parseRequest(Exchange exchange,String body) {
System.out.println("\r\n\r\n");
Message in=exchange.getIn();
Map<String, Object> ms=in.getHeaders();
Request r=new Request();
r.setHead(ms);
System.out.println("parseRequest--> heads="+ms+",body="+body);
r.setBody(body);
return r;
}
public String process(Request req) {
System.out.println("\r\n\r\n");
System.out.println("process--> heads="+req.getHead()+",body="+req.getBody());
String s="你好,系统时间为:"+new Date();
return s;
}
public void response(Exchange out,String html) {
System.out.println("\r\n\r\n");
System.out.println("response-->"+html);
out.getOut().setHeader(Exchange.CONTENT_TYPE, "text/html" + "; charset=utf-8");
//out.getOut().setHeader(Exchange.CONTENT_TYPE, "application/octet-stream" + "; charset=utf-8");
out.getOut().setBody(html);
}
public String toHtml(Object r) {
System.out.println("\r\n\r\n");
System.out.println("toHtml--> object="+r);
return String.valueOf(r);
}
/*
--> parse(request) //got head and body
--> response=route(request) //call remote system by head[system_id][service_id][method_id]
--> write_response(response)
配置文件名为:system_id_value.ini, 如:opg.ini
发起方:在head提供 system_id, service_id,method_id 三个参数,
esb在收到请求后,将请求转发到配置的 地址
system_url= //远程的接口 地址
uri_${service_id}_${method_id}= //远程方法uri, 和 system_url 组成完整的接口url
head_dealer=
body_dealer=
system_id=opg
service_url=http://127.0.0.1/opg //rmi, soa ,
method_uri=head //或者 url即将 /service_id/method_id 加到 service_url 后面
request_type=json //或者 map , 请求的数据格式:目标需要的 请求数据格式 json 或 httpRequest的 Map
response_type=json //text, 返回的数据格式
service_id
*/
}
camel-config.xml 主要内容:
<camelContext id="x2" xmlns="http://camel.apache.org/schema/spring">
<route id="enter">
<from uri="servlet:time"/>
<to uri="bean:testBean?method=showHeads(${in.headers})"/>
<to uri="direct:toProcess"/>
</route>
<route>
<from uri="direct:toProcess"/>
<to uri="bean:testBean?method=showBody(${exchange})"/>
<to uri="bean:testBean?method=parseRequest(${exchange},${body})"/>
<to uri="bean:testBean?method=process(${body})"/>
<to uri="bean:testBean?method=response(${exchange},${body})"/>
</route>
</camelContext>
用浏览器访问: http://127.0.0.1:8080/esb/camel/time 可获得系统的时间。
本测试主要体验了: direct 和 bean , exchange 的基本用法。
下面是用 karaf 过程的一些记录:
//注册 camel feature 到 karaf
feature:repo-add mvn:org.apache.camel.karaf/apache-camel/2.17.1/xml/features
//安装 camel 到 karaf
feature:install camel
feature:install -v camel-blueprint
//查看camel运行状态
feature:list | grep camel
//查看 repo
feature:repo-list
//加 camel-blueprint
feature:install camel-blueprint
mvn compile
mvn install / mv clean install
bundle:install mvn:com.packt.camel/chapter3/1.0-SNAPSHOT
bundle:list
bundle:start id
bundle:stop id
camel:context-list
bundle:uninstall chapter3
feature:install camel-jetty
相关推荐
《Camel实战中文版第四章》主要探讨了Apache Camel框架中如何利用现有的Java Bean进行消息处理和服务调用。这一章节对于理解和掌握Camel如何与现有Java系统集成非常重要。 #### 二、ServiceActivator企业设计模式的...
通过Spring,我们可以更方便地注入bean,利用Spring的事务管理功能,并且可以轻松地将Camel路由与其他Spring应用集成。 6. **Camel的DSL(领域特定语言)**:Camel 使用基于Java、XML或Groovy的DSL来编写路由规则,...
这里,`direct:startRead`是一个输入端点,可以通过Camel发送消息触发路由。`jdbc:dataSource`是输出端点,它会执行SQL查询并返回结果。你可以通过传递查询参数或设置额外属性来定制SQL语句。 对于CRUD操作,你还...
- **Bean 组件**:允许调用 Java Bean 的方法。 - **Direct 组件**:用于简单的消息传递,不涉及网络通信。 - **File 组件**:用于读取和写入文件系统中的文件。 - **Log 组件**:用于日志记录。 - **SEDA 组件**:...
Apache Camel 提供了丰富的组件库,包括bean component、browse component、dataset component、direct component、file component、log component、mock component等,这些组件可以帮助开发者快速实现各种集成需求...
5. **测试和调试** - 编写测试用例验证Camel路由和ActiveMQ的正确性,确保消息的正确发送和接收。 **应用示例:** 假设我们有一个需求,即从一个REST API接收数据,然后将这些数据发送到ActiveMQ队列,供其他系统...
rebuild order-center using apache camelpublic void configure() throws Exception { /**聚合下单入参,目前该流程未开启事务,如需开启,需spring配置事务管理器*/ from("direct:aggregationInputOrderParam") // ...
例如,我们可以使用`@PathParam`、`@QueryParam`等注解来获取路径和查询参数,同时,通过集成Java Bean Validation,我们可以方便地对请求参数进行校验。 除了基本的路由定义,Camel还支持使用 Swagger 来生成REST...
ContextBean-to.xml从direct:hello端点接收消息,并调用Bean方法hello。 ContextBean-to.xml由Java DSL配置组成。 在单独的jvm上执行两个上下文将org.apache.camel.spring.Main与-fa file/path/of/ContextBean-to....
- **集成框架比较**:本章比较了Spring Integration与其他流行的集成框架,如Apache Camel、Mule ESB等,帮助读者了解各种框架的特点和适用场景。 - **选择依据**:指导读者如何根据项目的具体需求来选择最适合的...