架构设计:系统间通信(36)——Apache Camel快速入门(上)

1、本专题主旨

1-1、关于技术组件

在这个专题中,我们介绍了相当数量技术组件:Flume、Kafka、ActiveMQ、Rabbitmq、Zookeeper、Thrift 、Netty、DUBBO等等,还包括本文要进行介绍的Apache Camel。有的技术组件讲得比较深入,有的技术组件则是点到为止。于是一些读者朋友发来信息向我提到,这个专题的文章感觉就像一个技术名词的大杂烩,并不清楚作者的想要通过这个专题表达什么思想。

提出这个质疑的朋友不在少数,所以我觉得有必要进行一个统一的说明。这个专题的名字叫做“系统间通讯”,在这个专题中我的讲解主要是围绕自己在实际工作中所总结的理论结构。从系统间通讯最基本的网络IO模型、消息格式、协议标准开始,再到搭建在其上的通讯组件,然后再关注更上层的进行通讯过程协调、统一通讯过程的中间件。这就是本专题的主旨。要说到本专题中笔者介绍的每一个技术组件,如果要做更深入的研究都可以再开新的专题,行业内各自都有很多的著作进行专门介绍。

那么为什么本专题中还要介绍这些技术组件呢?无非有三个原因:其一,是为了说清楚理论结构而服务。介绍JAVA对BIO、NIO和AIO三种网络IO模型的支持,是为了让读者对这三种网络模型的工作过程从感性过渡到理性;介绍RMI、Thrift是为了实例化笔者介绍的,搭建在网络IO模型上的RPC协议。其二,是笔者认为一些技术组件的设计思路,可以为各位架构师朋友在实际工作中所借鉴,例如笔者对DUBBO中一些功能模块的设计进行讲解、对Apache Thrift中序列化方式进行详细讲解就是出于第二个原因。其三,是因为本专题中设计的实战内容需要对将要用到的技术组件预先进行讲解。在本专题中,我们基于Thrift、Zookeeper自己设计了一个服务治理框架;我们还基于ActiveMQ、Kafka和Flume阐述了不同场景的日志系统设计方案。所以为了让更多的读者能够看懂这些技术方案,最好的方式就是将它们快速的介绍一下。

感谢那些在本专题中为了点“赞”的朋友,感谢那些在留言中向我提出修改意见、指出错误的朋友,特别是RMI的那篇文章犯的错误,太低级了。有你们的支持,让我觉得付出是有收获的;另外,目前这个系列的35片文章一共收到了7个“踩”,点“踩”的朋友能否在留言中为我指出文章的错误和不足,帮助我重新整理自己的思路,修正知识点的问题。谢谢。

1-2、关于代码示例

本专题中笔者贴出了占文章相当篇幅的代码片段,贴出这些代码片段主要也有三种可能的情况。其一,是为了各位读者快速了解某一种技术组件的基本使用;其二,是为了实现文章中描述的设计思路;其三,是为了进行技术验证,例如《架构设计:系统间通信(29)——Kafka及场景应用(中2)》文章中4-4-5小节列出的代码,是为了验证2013年2月2日,Kafka的主要参与者Neha Narkhede发表的一篇讲解Kafka Replication过程的技术文档。

有的读者向我提出,这些代码片段过于冗长,甚至有故意加长文章篇幅的目的。这个问题可能是我写作经验不足,给大家造成了困扰。不过,在文章中的贴出的代码为了达到相应的目的,都配有比较详细的注释说明,也为了避免各位读者在阅读代码时打瞌睡^_^。另外,我将在对这个专题文章的第二次整理时,会去掉类似于get/set这种性质的代码片段——它们确实有“占篇幅”之嫌。

1-3、关于抄袭

最后笔者认为抄袭是最卑劣的行为,所以本专题中的内容均是来源于笔者对键盘做功,涉及到的图例也是笔者一个一个画出来的,所有引用的图片、说明均注明出处。笔者欢迎转载,但未经授权请勿用于商业用途。

2、Apache Camel 快速入门

那么这里我们为什么又要花两篇文章的篇幅来介绍Apache Camel呢?因为后续文章中,在我们进行一款简单的ESB中间件设计时,我们将会依靠Apache Camel提供的协议转换、消息路由等核心能力。那么,就让我们开始吧!

2-1、Apache Camel介绍

Apache Camel的官网地址是http://camel.apache.org/,在本篇文章成文时最新的版本是V2.17.1,您可以通过多种手段进行下载。Apache Camel的官网并没有把Camel定义成一个ESB中间件服务,因为Camel并不是服务:

Camel empowers you to define routing and mediation rules in a variety of domain-specific languages, including a Java-based Fluent API, Spring or Blueprint XML Configuration files, and a Scala DSL. This means you get smart completion of routing rules in your IDE, whether in a Java, Scala or XML editor.

Apache Camel uses URIs to work directly with any kind of Transport or messaging model such as HTTP, ActiveMQ, JMS, JBI, SCA, MINA or CXF, as well as pluggable Components and Data Format options. Apache Camel is a small library with minimal dependencies for easy embedding in any Java application. Apache Camel lets you work with the same API regardless which kind of Transport is used - so learn the API once and you can interact with all the Components provided out-of-box.

Apache Camel provides support for Bean Binding and seamless integration with popular frameworks such as CDI, Spring, Blueprint and Guice. Camel also has extensive support for unit testing your routes.

以上引用是Apache Camel官方对它的定义。domain-specific languages指代的是DSL(领域特定语言),首先Apache Camel支持DSL,这个问题已经在上一篇文章中说明过了。Apache Camel支持使用JAVA语言和Scala语言进行DSL规则描述,也支持使用XML文件进行的规则描述。这里提一下,JBOSS提供了一套工具“Tools for Apache Camel”可以图形化Apache Camel的规则编排过程。

Apache Camel在编排模式中依托URI描述规则,实现了传输协议和消息格式的转换:HTTP, ActiveMQ, JMS, JBI, SCA, MINA or CXF等等。Camel还可以嵌入到任何java应用程序中:看到了吧,Apache Camel不是ESB中间件服务,它需要依赖于相应的二次开发才能被当成ESB服务的核心部分进行使用。

2-2、快速使用示例

说了那么多,那么我们来看看Apache Camel最简单的使用方式吧:

package com.yinwenjie.test.cameltest.helloworld;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.camel.Exchange;
  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值