论坛首页 Java企业应用论坛

Camel中的几个重要概念之 Endpoint

浏览 23114 次
该帖已经被评为良好帖
作者 正文
   发表时间:2009-01-22  
SOA

前段时间和一些朋友聊过Apache Camel , 他们都反映一个问题就是有关Camel构架的介绍文档很少。其实在Camel发行包中所带的文档Camel Manual 就有一段对Camel内部设计有一个比较好的介绍。我在这里把其中大部分的内容 翻译成了中文,希望能对大家了解Camel有所帮助。

Endpoint
Endpoint这个词以前经常被用来描述进程间通信。例如,在客户端与服务器之间的通讯,客户端是一个Endpoint和服务器是另外一个Endpoint。根据不同的情况下,一个Endpoint可能指的地址,如一个TCP通信的(主机:端口)对,也可能是指与这个地址相对应的一个软件实体。例如,如果大家使用“ www.example.com:80 ”来描述一个Endpoint。这些Endpoint可能是指实际的端口上的主机名称(即地址) ,也可能是指与地址相关的的网页服务器(即在这个地址之上运行的软件地址) 。通常情况下,这种地址和在这个地址之上运行的软件之前的区别并不是一个重要问题。

一些中间件技术可以使一些软件实体的绑定在相同的物理地址上。例如, CORBA是一种面向对象的远程过程调用( RPC )的中间件标准。如果一个CORBA的服务器进程包含几个对象,客户端可以与这些在同一物理地址(主机:端口)之上的任意对象进行通讯 ,但当客户端想与特定对象进行通讯是, 需要指定这个对象的逻辑地址(在CORBA中称为IOR)。 IOR是由物理地址(主机:端口) ,以及一个唯一识别的对象在其服务器进程标识所组成。 (IOR还包含了与此本次讨论无关其他一些额外的信息。)当谈论CORBA的时候,有些人可能会使用“endpoint”来描述CORBA的服务器的物理地址,而其他人可能使用Endpoint来描述一个CORBA对象的逻辑地址,和其他人可能会使用这个词来描述下面这些:

    * CORBA的服务器进程的物理地址(主机:端口)
    * CORBA对象的逻辑地址(主机:端口加上编号)
    * CORBA的服务器进程(相对重量级的软件实体)
    * 一个基于CORBA对象(一个轻量级的软件实体)


正因为如此,你可以看到Endpoint这个词至少在两方面是模糊的。首先,它可能是指一个地址或联络软件实体在该地址。其次,粒度上可能是模糊的:一个重量级与轻量级的软件实体,或物理地址与逻辑地址。了解了Endpoint这个名词在不同场景下的不同描述可以帮助我们更好地理解为什么Camel中的Endpoint。

Camel中的Endpoint支持许多不同的通信技术。以下是Camel所支持Endpoint。

    * 一个JMS队列。
    * 一个Web服务。
    * 一个文件。文件可能听起来不是一个典型的Endoint端点。但是你可以这么想,一些应用系统会把信息写到一个文件中,然后另一个应用程序可能读取该文件获得这一信息。
    * 一个FTP服务器。
    * 一个电子邮件地址。客户可以发送邮件到电子邮件地址,和一台服务器可以读取的这个从邮件服务器传入的邮件。
    * 一个POJO (普通旧Java对象)。

   发表时间:2009-01-23  
这个东西主要是做什么应用用到呀
0 请登录后投票
   发表时间:2009-01-24   最后修改:2009-02-04
whaosoft 写道
这个东西主要是做什么应用用到呀



Apache Camel 是一个非常强大的基于规则的路由以及媒介引擎,该引擎提供了一个基于POJO的 企业应用模式(Enterprise Integration Patterns)的实现,你可以采用其异常强大且十分易用的API (可以说是一种Java的领域定义语言 Domain Specific Language)来配置其路由或者中介的规则。 通过这种领域定义语言,你可以在你的IDE中用简单的Java Code就可以写出一个类型安全并具有一定智能的规则描述文件。这与那种复杂的XML配置相比极大简化了规则定义开发。 当然Apache Camel也提供了一个对Spring 配置文件的支持。

Apache Camel 采用URI来描述各种组件,这样你可以很方便地与各种传输或者消息模块进行交互,其中包含的模块有 HTTP, ActiveMQ, JMS, JBI, MINA or CXF API。 这些模块是采用可插拔的方式进行工作的。Apache Camel的核心十分小巧你可以很容易地将其集成在各种Java应用中。

简单来说, 你有一个JMS的应用, 同时有个基于FTP的应用,你现在想把这两个应用连接起来,就是让这两个应用之间能相互传递消息,那用Camel很容易就能帮你实现这个功能

你可以用Java DSL来定义一个路由规则

 from("jms://queue:inMessage").to("ftp://YourFTPServer");



并把Camel Context通过加载这个路由规则并启动之后,所有发往queue:inMessage 这个队列中的消息都会转发到你的FtpServer上,而用户需要做的只是定义这个路由转发规则。

Camel中的Endpoint屏蔽不同的通讯协议,让用户能够直接把精力放在消息路由的业务逻辑中来,这样可以大大提高企业应用集成的开发效率。

0 请登录后投票
   发表时间:2009-02-01  
呵呵,听起来似乎很不错,但是还没有从事过这方面的应用,有时间的话研究研究
0 请登录后投票
   发表时间:2009-02-01  
这几个概念翻译得好,其实所有的ESB差不多都这几个概念.
0 请登录后投票
   发表时间:2009-02-02   最后修改:2009-02-02
在Camel wiki
中有一个很好的文章Hiding Middleware, 其中道出了Camel的主要工作就是封装不同的中间件, 让用户使用更高层的 EIP 来完成你的应用集成工作。

When writing software these days, its important to try and decouple as much middleware code from your business logic as possible.

This provides a number of benefits...

    * you can choose the right middleware solution for your deployment and switch at any time
    * you don't have to spend a large amount of time learning the specifics of any particular technology, whether its JMS or JavaSpace or Hibernate or JPA or iBatis whatever

For example if you want to implement some kind of message passing, remoting, reliable load balancing or asynchronous processing in your application we recommend you use Camel annotations to bind your services and business logic to Camel Components which means you can then easily switch between things like

    * in JVM messaging with SEDA
    * using JMS via ActiveMQ or other JMS providers for reliable load balancing, grid or publish and subscribe
    * for low volume, but easier administration since you're probably already using a database you could use
          o Hibernate or JPA to use an entity bean / table as a queue
          o iBatis to work with SQL
          o JDBC for raw SQL access
0 请登录后投票
   发表时间:2009-02-04  
又见Jnn,哪天出来聚聚,跟你学习学习^_^
0 请登录后投票
   发表时间:2009-02-04  
boyingking 写道
又见Jnn,哪天出来聚聚,跟你学习学习^_^

Ah, 在这碰到你了。

还有就是我现在参加了每个月一次 coding-for-fun活动, 有机会我们可以在那现场hacking一把
0 请登录后投票
   发表时间:2009-02-05  
jnn 写道
boyingking 写道
又见Jnn,哪天出来聚聚,跟你学习学习^_^

Ah, 在这碰到你了。

还有就是我现在参加了每个月一次 coding-for-fun活动, 有机会我们可以在那现场hacking一把


好啊,年前那次活动本来想去的,结果没抽出时间来。下次一定去
0 请登录后投票
   发表时间:2009-02-05  
boyingking 写道
jnn 写道
boyingking 写道
又见Jnn,哪天出来聚聚,跟你学习学习^_^

Ah, 在这碰到你了。

还有就是我现在参加了每个月一次 coding-for-fun活动, 有机会我们可以在那现场hacking一把


好啊,年前那次活动本来想去的,结果没抽出时间来。下次一定去


哈, 那就下次活动的时候见了。
我可以给大家介绍一下正在开发的Camel 2.0 有啥新东西
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics