草庐IT

xml - 缓存 SOAP 响应

coder 2024-07-03 原文

我们当前的应用程序必须以 SOAP 样式服务的形式与 SAP PI 层对话。不幸的是,这个服务层没有实现任何形式的缓存,导致响应时间过长,即使对于后续请求也是如此。我们认为我们有两种选择来解决这个问题。请注意,这些是 HTTP POST。

  • 在第一次调用后缓存我们创建的 java 响应对象。
  • 通过在两者之间引入缓存代理来缓存 xml 响应。在这里使缓存响应无效和检查似乎更加困难,因为这将涉及窥视请求主体。

我们想知道,如果有人对这两种方法有任何经验,或者遇到类似情况,您会如何解决

最佳答案

在您着手制定缓存机制之前,请记住服务和流程(SOA 和 BPM)是关于什么的。它们旨在抽象出基于标准的接口(interface)背后的某种业务功能的实际实现。

当你说响应时间高的时候,你分析过延迟的根源是什么吗?

  • 您的延迟有多少是网络延迟?
  • 集成堆栈读取和写入您的 SOAP 请求和响应有多少?
  • 是否有其他开销,例如请求/响应的日志记录或持久化(例如,如果使用持久消息传递作为传输层)?
  • 在 SAP PI 中实际处理您的请求有多少延迟?

您正在调用的服务和进程应被视为黑盒,即您不必知道幕后发生的事情,只需知道它正在执行您要求它执行的功能即可。

但是,如果您实现缓存,则假设您正在调用的服务没有副作用,例如更新数据、保留审计跟踪、通知其他方或事件系统等。因此,即使您找到一种实现缓存需求的技术方法,您实际上可能会破坏服务实现。对于您的应用程序,它看起来不错,但您可能会影响您不知道的其他系统或进程。

如果您确信自己知道自己在做什么,那么一定要看看缓存。通过存储响应对象在您的应用程序中实现它可能是最快的,但不会被其他应用程序使用,因此性能优势将被本地化。如果您采用这种方法,您可能仍要考虑构建一种选择性缓存机制,而不是应用于所有机制。

一些 ESB 甚至 XML 网关/设备具有缓存功能。例如,我知道 IBM DataPower 设备具有文档缓存功能,您可以在其中控制缓存哪些服务/URL,以及这些缓存副本的生存时间。这种方法的优势在于可以为 SAP 服务的所有消费者提供您所寻求的相同性能提升。

另请记住,缓存会增加内存消耗,因此如果您不小心处理它,可能会导致您的应用程序或 ESB 或您用来实现它的任何东西耗尽内存。当我们在项目中遇到这个问题时,DataPower 似乎有一个不幸的习惯,就是在不告诉任何人的情况下自行重置! :)

希望对您有所帮助。

关于xml - 缓存 SOAP 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5648350/

有关xml - 缓存 SOAP 响应的更多相关文章

  1. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  2. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  3. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  4. ruby - 如何在 Ubuntu 中清除 Ruby Phusion Passenger 的缓存? - 2

    我试过重新启动apache,缓存的页面仍然出现,所以一定有一个文件夹在某个地方。我没有“公共(public)/缓存”,那么我还应该查看哪些其他地方?是否有一个URL标志也可以触发此效果? 最佳答案 您需要触摸一个文件才能清除phusion,例如:touch/webapps/mycook/tmp/restart.txt参见docs 关于ruby-如何在Ubuntu中清除RubyPhusionPassenger的缓存?,我们在StackOverflow上找到一个类似的问题:

  5. ruby-on-rails - Ruby on Rails 计数器缓存错误 - 2

    尝试在我的RoR应用程序中实现计数器缓存列时出现错误Unknownkey(s):counter_cache。我在这个问题中实现了模型关联:Modelassociationquestion这是我的迁移:classAddVideoVotesCountToVideos0Video.reset_column_informationVideo.find(:all).eachdo|p|p.update_attributes:videos_votes_count,p.video_votes.lengthendenddefself.downremove_column:videos,:video_vot

  6. ruby-on-rails - 在 Ruby on Rails 中发送响应之前如何等待多个异步操作完成? - 2

    在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.

  7. ruby-on-rails - 如何在 Rails 3 中禁用 XML 解析 - 2

    我想禁用HTTP参数的自动XML解析。但我发现命令仅适用于Rails2.x,它们都不适用于3.0:config.action_controller.param_parsers.deleteMime::XML(application.rb)ActionController::Base.param_parsers.deleteMime::XMLRails3.0中的等价物是什么? 最佳答案 根据CVE-2013-0156的最新安全公告你可以将它用于Rails3.0。3.1和3.2ActionDispatch::ParamsParser::

  8. ruby - 如何使用 Nokogiri::XML::Builder 生成动态标签? - 2

    我正在遍历数组中的一组标签名称,我想使用构建器打印每个标签名称,而不是求助于“我认为:builder=Nokogiri::XML::Builder.newdo|xml|fortagintagsxml.tag!tag,somevalendend会这样做,但它只是创建名称为“tag”的标签,并将标签变量作为元素的文本值。有人可以帮忙吗?这个看起来应该比较简单,我刚刚在搜索引擎上找不到答案。我可能没有以正确的方式提问。 最佳答案 尝试以下操作。如果我没记错的话,我添加了一个根节点,因为Nokogiri需要一个。builder=Nokogi

  9. ruby - 如何让 Nokogiri 解析并返回 XML 文档? - 2

    这是一些奇怪的例子:#!/usr/bin/rubyrequire'rubygems'require'open-uri'require'nokogiri'print"withoutread:",Nokogiri(open('http://weblog.rubyonrails.org/')).class,"\n"print"withread:",Nokogiri(open('http://weblog.rubyonrails.org/').read).class,"\n"运行此返回:withoutread:Nokogiri::XML::Documentwithread:Nokogiri::

  10. ruby - 模式加载时出现 Nokogiri::XML::Schema SyntaxError - 2

    我正在尝试加载SAML协议(protocol)架构(具体来说:https://www.oasis-open.org/committees/download.php/3407/oasis-sstc-saml-schema-protocol-1.1.xsd),但在执行此操作之后:schema=Nokogiri::XML::Schema(File.read('saml11_schema.xsd'))我得到这个输出:Nokogiri::XML::SyntaxErrorException:Element'{http://www.w3.org/2001/XMLSchema}element',att

随机推荐