`

Camel的direct,Bean测试

 
阅读更多

//处理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

 

 

 

0
2
分享到:
评论
5 楼 白云天 2016-05-31  
export jars to local directory :
mvn dependency:copy-dependencies  --导出到Project的targed/dependency 下面
mvn dependency:copy-dependencies -DoutputDirectory=lib  --导出到lib文件夹
4 楼 白云天 2016-05-24  
location /esb/ {
         proxy_pass http://172.19.6.150:89/esb/;
}
3 楼 白云天 2016-05-23  
centos 中添加 shell_script.sh 为开机启动,
ln -s path-to-shell_script.sh /etc/init.d/service-name
chkconfig –add  service-name
2 楼 白云天 2016-05-17  
How do I let Jetty match wildcards

By default Jetty will only match on exact uri's. But you can instruct Jetty to match prefixes. For example
from("jetty://0.0.0.0:8123/foo").to("mock:foo");

In the route above Jetty will only match if the uri is an exact match, so it will match if you enter
http://0.0.0.0:8123/foo but not match if you do http://0.0.0.0:8123/foo/bar.

So if you want to enable wildcard matching you do as follows:
from("jetty://0.0.0.0:8123/foo?matchOnUriPrefix=true").to("mock:foo");

So now Jetty matches any endpoints with starts with foo.

To match any endpoint you can do:
from("jetty://0.0.0.0:8123?matchOnUriPrefix=true").to("mock:foo");
1 楼 白云天 2016-05-16  
Maven 的安装:

[root@localhost ~]# wget http://mirror.cc.columbia.edu/pub/
  software/apache/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.tar.gz
[root@localhost ~]# tar xzf apache-maven-3.1.1-bin.tar.gz -C /usr/local
[root@localhost ~]# cd /usr/local
[root@localhost ~]# ln -s apache-maven-3.1.1 maven

当然,解压完下载下来的maven包是现在还不能启用,需要在PATH里面设置一下路径,如下:

[root@localhost ~]# vim /etc/profile.d/maven.sh
export MAVEN_HOME=/usr/local/maven
export PATH=${MAVEN_HOME}/bin:${PATH}

设置好Maven的路径之后,需要运行下面的命令

[root@localhost ~]# source /etc/profile.d/maven.sh

使得上面设置的环境变量立即生效。

wget http://mirror.bit.edu.cn/apache/karaf/4.0.5/apache-karaf-4.0.5.tar.gz

相关推荐

    Camel实战中文版第四章.pdf

    《Camel实战中文版第四章》主要探讨了Apache Camel框架中如何利用现有的Java Bean进行消息处理和服务调用。这一章节对于理解和掌握Camel如何与现有Java系统集成非常重要。 #### 二、ServiceActivator企业设计模式的...

    利用Camel调用远程对象

    通过Spring,我们可以更方便地注入bean,利用Spring的事务管理功能,并且可以轻松地将Camel路由与其他Spring应用集成。 6. **Camel的DSL(领域特定语言)**:Camel 使用基于Java、XML或Groovy的DSL来编写路由规则,...

    camel-JDBC

    这里,`direct:startRead`是一个输入端点,可以通过Camel发送消息触发路由。`jdbc:dataSource`是输出端点,它会执行SQL查询并返回结果。你可以通过传递查询参数或设置额外属性来定制SQL语句。 对于CRUD操作,你还...

    apache_camel_tutorial

    - **Bean 组件**:允许调用 Java Bean 的方法。 - **Direct 组件**:用于简单的消息传递,不涉及网络通信。 - **File 组件**:用于读取和写入文件系统中的文件。 - **Log 组件**:用于日志记录。 - **SEDA 组件**:...

    针对Java开发者的ApacheCamel入门指南

    Apache Camel 提供了丰富的组件库,包括bean component、browse component、dataset component、direct component、file component、log component、mock component等,这些组件可以帮助开发者快速实现各种集成需求...

    spring-boot-camel-jms:使用 Apache Camel 和 ActiveMQ 的 Spring Boot 应用程序

    5. **测试和调试** - 编写测试用例验证Camel路由和ActiveMQ的正确性,确保消息的正确发送和接收。 **应用示例:** 假设我们有一个需求,即从一个REST API接收数据,然后将这些数据发送到ActiveMQ队列,供其他系统...

    Apache-Camel-For-Order:使用Apache Camel重建订单中心

    rebuild order-center using apache camelpublic void configure() throws Exception { /**聚合下单入参,目前该流程未开启事务,如需开启,需spring配置事务管理器*/ from("direct:aggregationInputOrderParam") // ...

    restservice:用骆驼 2.15 休息

    例如,我们可以使用`@PathParam`、`@QueryParam`等注解来获取路径和查询参数,同时,通过集成Java Bean Validation,我们可以方便地对请求参数进行校验。 除了基本的路由定义,Camel还支持使用 Swagger 来生成REST...

    CamelUnderstanding:骆驼场景示例

    ContextBean-to.xml从direct:hello端点接收消息,并调用Bean方法hello。 ContextBean-to.xml由Java DSL配置组成。 在单独的jvm上执行两个上下文将org.apache.camel.spring.Main与-fa file/path/of/ContextBean-to....

    Pro Spring Integration

    - **集成框架比较**:本章比较了Spring Integration与其他流行的集成框架,如Apache Camel、Mule ESB等,帮助读者了解各种框架的特点和适用场景。 - **选择依据**:指导读者如何根据项目的具体需求来选择最适合的...

Global site tag (gtag.js) - Google Analytics