如何使用 Apache Camel 和 Jetty 创建 REST 微服务

Posted

技术标签:

【中文标题】如何使用 Apache Camel 和 Jetty 创建 REST 微服务【英文标题】:How to create REST micros-service using Apache Camel and Jetty 【发布时间】:2017-10-03 18:16:24 【问题描述】:

我一直在尝试使用 Apache Camel 创建基于 REST 的微服务。根据我的实验,这就是我使用 Jetty 创建回显服务的方式:

Maven

在 Maven 构建中包含以下依赖项:

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-jetty</artifactId>
</dependency>

Java

在 Java 中创建了一个小路由,它获取请求,将其转换为字符串,将其保存到文件中,然后将其发送回客户端:

import org.apache.camel.CamelContext;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;

public class EchoHttpServer 

    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:8099/echo?httpMethodRestrict=POST")
                        .convertBodyTo(String.class)
                        .to("file://D:/work")
                        .process(exchange -> exchange.getOut().setBody(exchange.getIn().getBody()));
            
        );
        context.start();
    

集成测试

这可以使用 Chrome 扩展 Postman 进行测试,您可以使用它发送一个 POST 请求,然后回复回应:

这是使用 Apache Camel 创建基于 REST 的服务的推荐方法吗?上述方法的潜在问题是什么?

【问题讨论】:

如果您想使用 Camel 创建基于 REST 的服务,我建议您查看 Camel Rest DSL:camel.apache.org/rest-dsl.html 我目前正在为内部评估创建一个基于 Camel 的伪 REST 服务。它使用 Camel 的 REST DSL 与 Jetty 和某些其他技术,如 JSON HAL 支持、Spring Security、Amazon XRay 和 Mongo Views。有兴趣的可以check out the Github repo。但是请注意,这更像是一个技术演示,而不是一个真正成熟的 API 【参考方案1】:

有几种方法可以使用 Camel 公开 REST 服务。

Pure servet - 这就是你已经做过的。似乎是一种快速简单的方式(可能太简单了)。

REST Camel 端点(感谢 noMad)http://camel.apache.org/restlet.html

在带有框架的容器中。我最喜欢的是 Apache Karaf 和 Camel-CXF 。启动需要更多时间,运行更多内存,但框架允许其他功能,例如身份验证、授权、日志记录、..

如果有人找到另一种方法,请添加答案或评论,我也很想找到新的选择

【讨论】:

如您所求:Camel 的 REST DSL ^^ 如果您也热衷于寻找新的选择,为什么不支持这个问题呢? :)

以上是关于如何使用 Apache Camel 和 Jetty 创建 REST 微服务的主要内容,如果未能解决你的问题,请参考以下文章

Apache Camel http 到 http 路由(有可能吗?)

Camel Jetty 中的 continuationTimeout 是不是可用于缓解慢速 HTTP Dos 攻击?

Jetty服务器关闭流生成500错误

Apache camel 错误处理如何与多播和事务一起使用

Apache Camel:如何存储变量以供以后使用

Apache Camel使用spring DSL比较字符串与引号,如何逃脱?