[IB]Integration Broker 是如何处理传入的请求(Part 2)
让我们讨论一下集成代理如何处理传入的请求。可以先阅读(理解PeopleSoft集成代理 Part1)。
当PeopleSoft集成代理接收传入请求时,会发生一系列事件。
当侦听连接器(Listening Connector)接收到请求时,连接器所做的第一件事就是将请求写入到网关日志文件。请求是完全按照接收的方式编写的。这有助于在规范化发生之前捕获消息的发送。
然后,连接器尝试用收到的消息填充内部请求消息类。传入消息有2个部分——凭证和mesage body。值得注意的是,没有凭证的消息无法处理。如果网关接收到这样的消息,将会出现错误,并将错误消息返回给请求者。在此步骤中不发生解析——只是验证。
接下来,消息是PeopleSoft Target Connector来操作。这个连接器有两个主要职责:它将消息序列化为一个字符串,并通过与应用服务器的一个jolt连接发送该字符串。网关和应用服务器之间的所有通信都是通过使用多用途Internet邮件扩展(MIME)消息完成的。通常,MIME消息只有两个部分——消息正文和XML格式的凭证。
PeopleSoft Target Connector以标准格式转换消息,这样才能被网关和应用程序服务器所理解。所有消息最终都必须解析成这种格式,然后才能将其发送到应用服务器进行处理,否则appserver将无法理解它们。这种格式有效地将应用服务器与网关支持的协议隔离开来。
一旦MIME消息被构建,它就被写入到网关日志。然后将MIME响应解析回网关请求对象,然后返回到倾听连接器。
最后,连接器从integration properties file中查找jolt连接属性,并尝试将MIME发送到应用服务器。如果这些属性没有正确设置,网关将无法发送请求。
要记住的一点是,即使对appserver的MIME请求可能出现在网关日志文件中,实际的请求可能还没有到达应用服务器,因为日志条目是在消息发送之前写的。如果发生通信错误,该条目将仍然存在于日志文件中。但是,如果出现这种情况,将抛出异常,也将创建一个错误日志条目。
当应用服务器接收MIME请求时,将解析消息并用于构建请求对象。假定消息没有发生错误,应用程序服务器必须在实际处理请求之前预先处理消息。预处理包括:
- 根据配置的身份验证方案验证消息。如果请求失败身份验证,则返回一个错误。
确定是否有与节点事务表中的请求对应的事务。除了Ping消息,所有传入的消息都必须解析为该表中唯一的条目。如果不能为请求找到合适的事务,则发生错误。
确定要调用的消息处理程序。目前,集成代理支持三种消息类型:Ping、同步和异步。消息类型确定要调用的处理程序代码。同步消息传递到特定于sync的代码,而async消息传递给发布/订阅subsytem。
一旦消息传递给它们各自的处理程序,进一步的处理将由数据和特定于特定系统的人员决定。异步请求将被发布,订阅PeopleCode将被执行。同步消息可以调用PeopleCode,或者在集线器配置的情况下,请求可以立即路由到另一个外部系统。
8. 不管请求是如何处理的,响应消息必须由应用服务器返回到相同执行线程中的网关。网关与应用服务器之间的连接本质上是同步的,独立于交换的消息的类型。当网关向应用服务器发送请求时,它期望并必须得到响应。
在同步消息的情况下,响应的生成被请求的处理阻塞。无法生成响应,直到消息运行完成为止。在接收响应时,可能会有一个明显的延迟,这取决于PeopleCode是否正在运行,或者请求消息是否被从代理发送到外部系统以进行额外处理。
不像同步请求,在异步请求的情况下没有阻塞。当请求被写入发布队列时,将生成一个异步请求的响应。因此,对于异步请求生成的响应并不是最严格意义上的响应。这样的回答应该被认为是“pub / sub系统接收到消息”的响应。收到这样的响应并不能保证任何适用的订阅人员都成功运行了。
响应消息被应用服务器转换为MIME标准,并返回到网关。
9.一旦MIME PeopleSoft Target Connector收到响应,它是日志文件写入到网关。然后将MIME响应解析回网关请求对象,然后返回到ListeningConnector。
10. reponse对象被返回到ListeningConnector,响应被映射到一个响应给定协议的响应。从ListeningConnector的角度来看,请求消息的处理是同步进行的。一个请求被一个ListeningConnector接收,然后将其覆盖到合适的格式,对网关进行阻塞调用,以处理消息,并最终在执行的相同线程中得到响应。
如果感到对您有帮助没准儿你就会赞赏,iOS 专用赞赏通道:
[IB]Integration Broker 是如何处理传入的请求(Part 2)的更多相关文章
- 理解PeopleSoft集成代理(Integration Broker)-第1部分
PeopleSoft 集成代理对于那些刚开始开发PeopleSoft的工程师来说是模糊的,因此,本文的目的是帮助哪些想要了解Peoplesoft集成代理的人. 介绍PeopleSoft集成代理 peo ...
- ASP.NET Core应用针对静态文件请求的处理[3]: StaticFileMiddleware中间件如何处理针对文件请求
我们通过<以Web的形式发布静态文件>和<条件请求与区间请求>中的实例演示,以及上面针对条件请求和区间请求的介绍,从提供的功能和特性的角度对这个名为StaticFileMidd ...
- StaticFileMiddleware中间件如何处理针对文件请求
StaticFileMiddleware中间件如何处理针对文件请求 我们通过<以Web的形式发布静态文件>和<条件请求与区间请求>中的实例演示,以及上面针对条件请求和区间请求的 ...
- IIS 是如何处理 ASP.NET 请求的
#main{ width:1250px; } #mainContent{ width:915px } img#imgTop{ max-width:850px; } Web 服务器 VS Web 应用程 ...
- 根据传入url请求,返回json字符串
/** * 根据传入url请求,返回json字符串 * @param url * @return * @throws UnsupportedEncodingException */ public st ...
- IIS是如何处理ASP.NET请求的
每次服务器接受到请求,都要先经IIS处理.这不是一篇描述ASP.NE生命周期的文章,仅仅是关于IIS操作的.在我们开始之前,先了解这些会有助于对全文的理解,同时欢迎反馈和建议. 什么是Web Serv ...
- [转载]LoadRunner如何处理AJAX异步请求
最近在网上经常有人问“LoadRunner脚本回放成功,但数据没有写入数据库,这是什么原因”,记得以前的同事也遇到过相同的问题,再次将解决方法贴出来,希望能帮助大家. 相信大家在做测试的过程中,特别是 ...
- 记录python接口自动化测试--从excel中读取params参数传入requests请求不生效问题的解决过程(第七目)
在第六目把主函数写好了,先来运行一下主函数 从截图中可以看到,请求参数打印出来了,和excel中填写的一致 但是每个接口的返回值却都是400,提示参数没有传进去,开始不知道是什么原因(因为excel中 ...
- spring mvc后台如何处理ajax的请求,并返回json
spring mvc中有一个注解:@ResponseBody,把这个注解放到ajax请求对应的@RequestMapping(xxx)方法上,在方法体内部,把要返回的json赋给一个String类型的 ...
随机推荐
- Spark基础-scala学习(三、Trait)
面向对象编程之Trait trait基础知识 将trait作为接口使用 在trait中定义具体方法 在trait中定义具体字段 在trait中定义抽象字段 trait高级知识 为实例对象混入trait ...
- MySQL:数据库表的空间回收
1. 表数据的存储方式 表数据既可以存储在共享表空间,也可以时单独的文件.这个行为由参数 innodb_file_per_table 控制: 设置为 OFF 时,表示表数据存储在共享表空间: 设置为 ...
- jQuery之animate()用法
最近在学习jQuery,看到一个很有意思的函数animate(),但是在网上却没有查到相关的详细资料,于是打算参考jQuery API,自己总结一下. 概述 animate() 方法执行 CSS 属性 ...
- 性能调优之Mapping
Mapping层级的调优可能会花费时间,但是性能调优的效果确实非常显著的 优化Target,Source之后,可以调优Mapping 通常的方法是尽可能减少组件及组件的字段间不必要的连线 即尽可能用最 ...
- ASP .NET CORE 根据环境变量支持多个 appsettings.json
0.背景 在开发项目的过程当中,生产环境与调试环境的配置肯定是不一样的.拿个最简单的例子来说,比如连接字符串这种东西,调试环境肯定是不能连接生产数据库的.在之前的话,这种情况只能说是你 COPY 两个 ...
- Mybatis解析mapper
众所周知,接口是不能被实例化的,但是日常开发中,我们经常能直接使用dao层对象的方法,这又是为什么呢. 带着这些问题,我们看下mybatis内部做了那些操作. Mapper解析 上文我们描述了myba ...
- EntityFramework中对象的状态管理(笔记)
刚开始接触EF框架的时候总是不明白: 为什么查询出来的对象 Remove().再 SaveChanges()就会把数据删除.而自己 new 一个Person()对象,然后 Remove()不行? 为什 ...
- 西安活动 | 9月15号 "拥抱开源, 又见.NET" 线下交流活动
随着.NET Core的发布和开源,.NET又重新回到了人们的视野.除了开源.跨平台.高性能以及优秀的语言特性,越来越多的第三方开源库也出现在了github上——包括ML.NET机器学习.Xamari ...
- MongoDB从入门到优化
目录 一.MongoDB 简介 二.MongoDB 的储存引擎 三.mongodb 配置参数 四.MongoDB 单节点搭建 五.MongoDB 连接 六.MongoDB 常用命令 七.MongoDB ...
- MySQL中间件之ProxySQL(14):ProxySQL+PXC
返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.ProxySQL+PXC 本文演示ProxySQL代理PXC(Pe ...