规则引擎(Apache camel) 学习二

1.Camel要素

   Endpoint 控制端点:

       概述:

           Apache Camel中关于Endpoint最直白的解释就是,Camel作为系统集成的基础服务组件,在已经编排好的路由规则中,

          和其它系统进行通信的设定点

          这个“其它系统”,可以是存在于本地或者远程的文件系统,可以是进行业务处理的订单系统,可以是消息队列服务,可以是提供了访问地址、访问ip、

          访问路径的任何服务。Apache Camel利用自身提供的广泛的通信协议支持,使这里的“通信”动作可以采用大多数已知的协议,

           例如各种RPC协议、JMS协议、FTP协议、HTTP协议。。。

      实现:

          1.Camel中的Endpoint控制端点使用URI的方式描述对目标系统的通信。例如以下URI描述了对外部MQ服务的通信,消息格式是Stomp:

               // 以下代码表示从名为test的MQ队列中接收消息,消息格式为stomp
               // 用户名为username,监听本地端口61613
              from("stomp:queue:test?tcp://localhost:61613&login=username")
               // 以下代码表示将消息发送到名为test的MQ队列中,消息格式为stomp
               to("stomp:queue:test?tcp://localhost:61613&login=username");

          2. 更多的stomp控制端点的说明可参见Camel中的说明:http://camel.apache.org/stomp.html 。

              再例如,我们可以使用Http协议和某一个外部系统进行通信,更多关于Http控制端点的说明

              也可参见Camel中的说明: http://camel.apache.org/http.html :

                    // 主动向http URI描述的路径发出请求(http的URI笔者不需要再介绍了吧)
                    from("http://localhost:8080/dbk.manager.web/queryOrgDetailById")
                    // 将上一个路由元素上Message Out中消息作为请求内容,
                    // 向http URI描述的路径发出请求
                    // 注意,Message Out中的Body内容将作为数据流映射到Http Request Body中
                    to("http://localhost:8080/dbk.manager.web/queryOrgDetailById")

           总结:以上的示例中,请注意“from”部分的说明。它并不是等待某个Http请求匹配描述的URI发送到路由路径上,

                      而是主动向http URI描述的路径发送请求。如果想要达到前者的效果,请使用Jetty/Servlet开头的相关通信方式:

                      http://camel.apache.org/servlet.html 和 http://camel.apache.org/jetty.html。           

                      而通过Apache Camel官网中 http://camel.apache.org/uris.html 路径可以查看大部分Camel通过URI格式所支持的Endpoint。

        endpoint和URI之间关系的描述:

                官网:Camel makes extensive use of URIs to allow you to refer to endpoints which are lazily created by

                           a Component if you refer to them within Routes.

                 从这段官方描述可以看出,不同的endpoint都是通过URI格式进行描述的,并且通过Camel中的org.apache.camel.Component(endpoint构建器)                  接口的响应实现进行endpoint实例的创建。需要注意的是,Camel通过plug方式提供对某种协议的endpoint支持,

                 所以如果读者需要使用某种Camel的endpoint,就必须确定自己已经在工程中引入了相应的plug。

                 例如,如果要使用Camel对Netty4-Endpoint的支持,就需要在工程中引入Camel对Netty4的支持,如下:

                        <dependency>
                             <groupId>org.apache.camel</groupId>
                             <artifactId>camel-netty4</artifactId>
                             <version>x.x.x</version>
                     </dependency>

                注:在这个camel-plug引用中,就包含了Netty4对Endpoint的实现和Netty4对Component的实现: 

                       org.apache.camel.component.netty4.NettyEndpoint、org.apache.camel.component.netty4.NettyComponent。

 

    Exchange和Message消息格式:

           概述:消息在我们已经编排好的业务路径上进行传递,通过我们自定义的消息转换方式或者Apache Camel提供的消息转换方式进行消息格式转换。

                      那么为了完成这些消息传递、消息转换过程Camel中的消息必须使用统一的消息描述格式,并且保证路径上的控制端点都能存取消息

           过程和Exchange的作用:

                 Camel提供的Exchange要素帮助开发人员在控制端点到处理器、处理器到处理器的路由过程中完成消息的统一描述

                一个Exchange元素的结构如下图所示:

                   

  学习来源:http://www.uml.org.cn/zjjs/201801222.asp?artid=20340

posted @ 2020-08-25 17:40  小窝蜗  阅读(1012)  评论(0编辑  收藏  举报