Apache Camel的Jetty组件概述

485 阅读3分钟

简介

在深入了解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创建一个简单的服务。