简介
在深入了解Apache camel的Jetty组件之前,我们先了解一下Camel。在核心部分,Camel框架是一个路由引擎,或者更准确地说,是一个路由引擎构建器。它允许你定义自己的路由规则,决定从哪些来源接受消息,并决定如何处理和发送这些消息到其他目的地。Camel使用一种集成语言,允许你定义复杂的路由规则,类似于业务流程。
这些是Camel背后的主要思想:
■路由和调解引擎
■企业集成模式(EIPs)
■特定领域语言(DSL)
■广泛的组件库
■与有效载荷无关的路由器
■模块化和可插拔架构
■POJO模型
■易于配置
■自动类型转换器
■轻量级核心
■测试工具包
■充满活力的社区
骆驼的基本原则之一是,它对你需要处理的数据类型不做任何假设。这是非常重要的一点,因为它给了你这个开发者一个机会去整合任何类型的系统,而不需要把你的数据改成规范的格式。
Jetty组件
- Jetty是免费和开源的Java HTTP(Web)服务器和Java Servlet容器。
- Apache Camel Jetty组件提供了基于HTTP的端点,用于消费和生产HTTP请求。
- Jetty组件消耗和产生HTTP请求/响应,支持GET、POST、PUT、DELETE等形式的方法。
- Jetty最常被用作Camel路由中的起始组件。
Jetty的Maven依赖性
如果你使用Maven,只需在你项目的POM中添加以下内容。
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-jetty</artifactId>
<version>2.16.2</version>
</dependency>
让我们用Jetty创建一些简单的服务吧!
我们将使用DSL创建一个Hello World的例子,我们也可以使用Spring DSL。首先,我们将定义from,因为from是Apache Camel的起点,然后我们定义了jetty。Jetty表示这是Apache Camel的jetty组件,它表示我们需要jetty服务器来访问例子中给出的END点。
package com.camel.jetty;
import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
public class HelloWord {
public static void main(String[] args) throws Exception {
CamelContext context = new DefaultCamelContext();
context.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("jetty:http://localhost:8080/hellowordjetty").process(new Processor() {
public void process(Exchange exchange) throws Exception {
Message out = exchange.getOut();
out.setBody("Hello Jetty World!");
}
});
}
});
context.start();
}
}
告诉Camel使用Jetty组件并启动一个Web服务器,该服务器监听IP为127.0.0.1,端口为8080,接收**/hellowordjetty的请求。在成功响应中返回Hello, Jetty World!**
测试Jetty服务
Open your web browser and go to the address http://localhost:8080/hellowordjetty.
你也可以在命令行中运行路由,方法是:cd到你的项目文件夹,然后输入 **mvn exec:java**.
Jetty URI格式
Jetty最常被用作Camel路由中的起始组件。该组件的URI格式样本是。
Pattern: jetty:http://{ip_address}:{port}/{path}
jetty:http://127.0.0.1:8080/hellowordjetty
jetty:http://127.0.0.1:8080/hellowordjetty?name=abc
jetty:http://0.0.0.1:8080/hellowordjetty
jetty:https://localhost:8080/hellowordjetty
其中ip_address是Jetty应该监听的地址,port是HTTP端口号,path是端点的路径。比如说。
现在,我们将看到一个HTTP会话的例子
Jetty的HTTP会话例子
为了使用HTTP会话,我们必须通过下面的选项,即sessionSupport=true。
URI:jetty:https://localhost:8080/session/?sessionSupport=true
DSL
from("jetty:http://localhost:8080/session?sessionSupport=true").process(new Processor() {
public void process(Exchange exchange) throws Exception {
HttpSession session = exchange.getIn(HttpMessage.class).getRequest().getSession();
Message out = exchange.getOut();
out.setBody(session.getId());
}
});
HTTP Servlet请求的例子
from("jetty:http://localhost:8080/user/agent").process(new Processor() {
public void process(Exchange exchange) throws Exception {
HttpServletRequest req = exchange.getIn().getBody(HttpServletRequest.class);
Message out = exchange.getOut();
out.setBody(req.getHeader("User-Agent"));
}
});
总结
我们已经看到了Jetty组件的基本用法,比如用Jetty创建一个简单的服务。
