apache camel_REST端点,可使用Apache Camel进行集成

apache camel

REST是一种用于组织资源的体系结构样式,当应用于基于HTTP的服务时,REST可以构建无状态,分离的可伸缩服务。 HTTP方法,HTTP标头和mime类型都允许开发人员实现REST样式。 诸如Jersey和Fuse Services Framework(Apache CXF)之类的框架可用于加速服务的开发和部署,以尝试实现RESTful风格,在本博文中,我想讨论如何构建资源的后端依赖于Fuse中介路由器(也称为Apache Camel)提供的集成。

顺便说一句,对于那些想知道您的体系结构是否确实是RESTful还是REST试图缓解的高度耦合的RPC样式的人来说,我藏在书签凹槽中的链接可能会引起您的兴趣。 关于REST撰写论文的Roy Fielding积极主张资源表示中的超链接对于REST风格必不可少的观点,甚至进一步阐明了实现REST的不确定性。

该示例的源代码可以在我的github存储库中找到

Fuse中介路由器是FuseSource的企业级硬化版Apache Camel,提供了舒适的DSL,用于描述集成,中介和路由。 它是免费的开放源代码,并具有Apache许可证。 对于那些不熟悉Mediation Router / Camel的人,请看DZone企业集成区Apache Camel:Integration Nirvana的 Jon Anstey( Camel in Action的合著者)的介绍。

我们将使用中介路由器来帮助在REST端点和文件系统上的资源文件之间编写简单的集成。 我将使用camel-cxfrs组件公开REST端点,并将使用camel-file组件读取文件系统上的目录。 该样本的目的是描述必要的配置,以通过中介路由器公开REST接口,以某种方式与后端集成,将数据转换为适当的REST响应并发送回该响应。

首先,让我们集中讨论如何设置REST端点。 为此,您将创建一个JAX-RS资源,该资源描述将用作REST端点的java方法。 此示例代码要求熟悉RESTful Web服务 (又名JAX-RS)的Java API 。 对于那些不熟悉的人,这里有一些不错的教程,可以帮助您理解JAX-RS。

@Path("/customerservice/")
public class CustomerServiceResource {// NOTE: The instance member variables will not be available to the
// Camel Exchange. They must be used as method parameters for them to
// be made available
@Context
private UriInfo uriInfo;public CustomerServiceResource() {
}@GET
@Path("/customers/{id}/")
@Produces("text/xml")
public Customer getCustomer(@PathParam("id") String id) {return null;
}@PUT
@Path("/customers/")
public Response updateCustomer(Customer customer) {return null;
}}

如您所见,注释是JAX-RS注释,用于描述REST端点所涉及的操作,HTTP方法和mime类型。 注意,返回值全为空,因为此类实际上将不会用于处理进入端点的请求。 中介路由器路由将负责处理和响应。 但是请注意,实例成员不可用于中介路由器交换,即,通过JAX-RS @Context注释注入的任何实例成员将不可用。 要使它们可用,请将它们作为参数添加到您的方法中。

可以使用以下两种方法之一来声明使用中介路由器的CXF-RS端点:直接在端点配置中,如下所示:

from("cxfrs://http://localhost:9090/route?resourceClasses=com.fusesource.samples.CustomerServiceResource")

直接在配置中创建它需要较少的xml配置,但灵活性有限。 另一个选择是创建一个负责端点的单独的bean,然后在端点配置中引用它:

from("cxfrs:bean:rsServer")

Bean rsServer应该在骆驼上下文中定义。 例如:

<cxf:rsServer id="rsServer" address="http://localhost:9090/route"serviceClass="com.fusesource.samples.CustomerServiceResource"/>

这种方法允许您解耦端点配置,并允许端点配置更快,更省力。 尽管使用了第一个选项,但两个选项都显示在示例代码中。

这就是使用中介路由器公开REST端点所需的全部配置。 很简单。 下一步是根据来自REST端点的内容使用文件系统中的文件。 该文件的内容将返回给REST调用的客户端。 为此,我们使用骆驼文件组件,并通过DSL中的pollEnrich调用丰富Exchange:

.setHeader(Exchange.FILE_NAME, simple("test-${body}.xml"))
.pollEnrich("file:src/data?noop=true", 1000, new CustomerEnricher())

我们不能在pollEnrich调用中使用任何动态表达式,因此我们在进行扩展之前设置文件组件可以理解的标头。 在这种情况下,REST消息的主体是可用于对文件系统资源进行模板化的标识符。

最后,我们可以对路线进行一些附加处理:

.process(new CustomerServiceProcessor())

如上所述,该示例的目的是显示如何配置终结点并将其附加到进一步的中介路由器处理中。 请注意,REST端点的消息交换模式(MEP)为InOut并期望响应。 该示例并不意味着是完整的端到端解决方案,因为该解决方案将根据预期的功能而有所不同。 请注意上面有关Roy关于什么是REST和不是REST 的讨论的链接。

如果我遗漏了一些内容,或者您​​需要对示例进行更多说明,请给我评论,我们可以进行讨论。

参考: Christian Posta软件博客上的REST端点,用于使用我们的JCG合作伙伴 Christian Posta的Apache Camel进行集成 。


翻译自: https://www.javacodegeeks.com/2012/05/rest-endpoint-for-integration-using.html

apache camel

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/355953.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux读取SSD的smart信息,使用smartmontools查看SSD的“秘密”信息

仍然担心看不到sm841中的温度吗&#xff1f;您是否仍对Toshiba Q pro看不见写入量和使用寿命值感到不安&#xff1f;为了查看M4 / 00的写入量&#xff0c;您是否仍在使用C300固件升级程序重新启动到纯DOS并麻烦地运行命令&#xff1f;想知道在协议级别上SSD出了什么问题吗&…

Linux查看系统信息的一些命令及查看已安装软件包的命令

系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # hostname # 查看计算机名 # lspci -tv # 列出所有PCI设备 # lsusb -tv # 列出所…

5条Java记录规则

日志记录是一个关键因素&#xff0c;在软件开发过程中应始终将其考虑在内。 当生产中发生不良情况时&#xff0c;日志文件通常是我们进行故障分析的起点。 而且&#xff0c;通常&#xff0c;它们是我们掌握的唯一信息&#xff0c;可以了解发生了什么以及问题的根本原因。 正确…

linux 离线安装中文字库,centos7 离线安装字体fontconfig

起因&#xff1a;最近做了个flowable然而linux下乱码&#xff0c;发现需要安装字体包在线&#xff1a;直接 yum -y install fontconfig&#xff1b;yum -y install ttmkfdir&#xff1b;配置下即可。拓展&#xff1a;离线所需rpm包如何获取&#xff1f;百度不好找&#xff0c;找…

锁定机制和数据并发管理(笔记)

共享锁和排它锁 排它锁&#xff1a;当某一个会话正在更新某一行&#xff0c;为了防止其他会话修改这一行&#xff0c;这行会被锁定这种锁称为排他锁。被排他锁锁定的行仍然可以被其他会话读取。 共享锁&#xff1a;在一个表上放置共享锁的目的是为了防止其他会话获得这个表上的…

linux防火墙配置说明,Linux防火墙配置命令参数说明

规则操作参数说明&#xff1a;-A&#xff1a;在所选择的链末添加一条或更多规则&#xff1b;-D&#xff1a;从所选链中删除一条或更多规则。有两种方法&#xff1a;把被删除规则指定为链中的序号(第一条序号为1)&#xff0c;或者指定为要匹配的规则&#xff1b;-R&#xff1a;从…

【react.js + hooks】useGuide 创建用户引导视图

有的时候用户可能对网站上的一些操作流程感到困惑&#xff0c;这时候我们需要为用户创建引导视图。为了插入指引而专门去更改组件的渲染函数&#xff0c;显然是不合逻辑的&#xff0c;创建指引视图应该是一种对源代码低侵入的行为&#xff0c;我们可以遵循某一套约定&#xff0…

使用递归算法结合数据库解析成java树形结构

使用递归算法结合数据库解析成java树形结构 1、准备表结构及对应的表数据a、表结构&#xff1a; create table TB_TREE ( CID NUMBER not null, CNAME VARCHAR2(50), PID NUMBER //父节点 ) b、表数据&#xff1a; insert into tb_tree (CID, CNAME, PID) values (1, 中国, 0);…

ug11 linux,UG11.0升级包MP02Win#Linux系统下载就上UG网

UG11.0软件又出升级包啦&#xff01;抽空可以为NX升级啦&#xff0c;从11.0发布到现在&#xff0c;近三个月了&#xff0c;每一次版本的更新&#xff0c;都会带来较多功能的改善&#xff0c;以及对错误BUG的有效处理&#xff0c;下图为升级后的UG11.0软件&#xff1b;UG11.0升级…

akka 异常处理_使用Akka处理1000万条消息

akka 异常处理Akka演员承诺并发。 有什么更好的模拟方法&#xff0c;看看使用商品硬件和软件处理1000万条消息需要花费多少时间&#xff0c;而无需进行任何低级调整。我用Java编写了整个1000万条消息的处理过程&#xff0c;整个结果令我惊讶。 当我在具有i5 – 4核心&#xff0…

20155330 2016-2017-2 《Java程序设计》第五周学习总结

20155330 2016-2017-2 《Java程序设计》第五周学习总结 教材学习内容总结 学习目标 理解异常架构掌握try...catch...finally处理异常的方法会用throw,throws理解Collection和Map架构会用常见的数据结构和算法了解Lambada和泛型第八章 章节主要内容 小结 Throwwable定义了取错误…

yum安装odbc驱动linux,在CentOS上离线配置PostgreSQL ODBC数据源

一、问题提出内网的一台CentOS服务器&#xff0c;需配置PostgreSQL ODBC。如果可以连接Internet&#xff0c;此工作很容易&#xff0c;使用yum install自动安装相应依赖包后简单配置即可。但当置于内网环境时&#xff0c;事情就有些麻烦&#xff0c;需要事先手工下载各个依赖包…

树形dp小胖守皇宫(vijosP1144)

题目链接&#xff1a;https://vijos.org/p/1144 题解&#xff1a;这道题的动归稍稍有一点的复杂&#xff0c;因为一个节点有可能被它的子节点观察&#xff0c;也有可能被父节点观察&#xff1b; 所以我们这样表示&#xff1a; f[i][0]&#xff08;表示当前i节点放了一个看守&am…

微服务和Java EE

基于微服务的架构如今无处不在。 我们对Netflix和Amazon等当今的创新者如何利用它们在成功产生更多业务方面取得更大的成功了解到很多。 但是&#xff0c;我们所有人都在使用Java EE应用程序服务器并编写经典系统吗&#xff1f; 我们都做错了吗&#xff1f; 我们如何使我们的技…

pcie组raid linux,PCIe 4.0有多强大?组RAID 0阵列之后惊呆了

技嘉在6月16日21:00正式上市了全系列B550系列主板&#xff0c;B550系列主板属于AMD中端系列芯片组&#xff0c;能原生支持PCIe 4.0技术&#xff0c;而这次技嘉B550 AORUS MASTER主板更是不得了&#xff0c;提供了3个支持PCIe 4.0技术的M.2接口&#xff0c;你还可以组RAID 0阵列…

oracle中 trunc(),round(),ceil(),floor的使用

原文&#xff1a; http://www.2cto.com/database/201310/248336.html 1.round函数(四舍五入&#xff09; 描述 : 传回一个数值&#xff0c;该数值是按照指定的小数位元数进行四舍五入运算的结果参数: number : 欲处理之数值 decimal_places : 四舍五入 , 小数取几位 ( 预设为 0…

Java中的指针

Java中是否有指针&#xff1f; 简短的答案是“不&#xff0c;没有”&#xff0c;这对于许多开发人员来说似乎是显而易见的。 但是&#xff0c;为什么对其他人却不那么明显呢&#xff1f; http://stackoverflow.com/questions/1750106/how-can-i-use-pointers-in-java http://…

Android实践 -- 监听应用程序的安装、卸载

监听应用程序的安装、卸载 在AndroidManifest.xml中注册一个静态广播,监听安装的广播android.intent.action.PACKAGE_ADDED 监听程序卸载的广播android.intent.action.PACKAGE_REMOVED ,在广播中一定要加上 <data android:scheme"package" /> 不然就监听不到 &…

符合c语言常量12abc,《C语言》试题abc合2006上.doc

《C语言》试题abc合2006上《c语言》试题(A)一、单项选择题(每小题2分&#xff0c;共20分)以下选项中正确的整型常量是 BA)12. B) -20 C) 1,000 D) 4 5 62.以下选项中不合法的用户标识符是 AA)abc.c B)file C)Main D)PRINT3&#xff0e;可在C 程序中用作用户标识符的标识符是 BA…

redis学习之——redis.conf配置(基本)文件学习

# Redis configuration file example# Note on units: when memory size is needed, it is possible to specify //1 配置大小单位,开头定义了一些基本的度量单位&#xff0c;只支持bytes&#xff0c;不支持bit …