2013-03-26 53 views
0

我有一个应用程序查询某个服务的web服务的hostName:port。在开发过程中,某些服务不可用或正在由第三方构建,因此为了开发我们的应用程序,我正在考虑将soapUI的模拟服务用作某些服务的存根。

问题是,我只能在一个方向指向我的应用程序一次,所以如果我指向mockservice,我需要确保mockservice是模拟所有服务(> 50),这是开销太大。因此,我正在考虑将我的应用程序指向代理服务器,该代理服务器将一些请求重定向到模拟服务器,并保留给实际的服务提供商。有没有什么办法可以通过一个简单的脚本来做到这一点?python/perl/shell脚本中的条件代理服务器

+0

“我只能将应用程序指向一个方向” - 这是什么意思? – shx2 2013-03-26 19:14:09

+0

@ shx2我已经在属性文件中配置了webService url,比如“xyzServiceProvider.uri = https:// abc:8080” – Rnet 2013-03-26 19:15:27

回答

2

当然。草图使用Perl:

#!perl 
use strict; 
use warnings; 
use Plack::App::Proxy; 

my $live_proxy = Plack::App::Proxy->new(
    remote => "http://live.soap.service.com:80/" 
); 

my $soapui_proxy = Plack::App::Proxy->new(
    remote => "http://localhost:4567/" 
); 

sub { 
    my $env = shift; 
    if ($env->{REQUEST_URI} =~ m[^/some/path]) { 
     return $soapui_proxy->($env); 
    } else { 
     return $live_proxy->($env); 
    } 
}; 

安装Plack并运行它作为plackup filename。它构建了两个代理应用程序,一个将所有请求转发到实时服务URL,另一个将所有请求转发到您的模拟服务URL。然后,包装应用程序根据URL选择哪个应用程序来分配任何给定的请求(如果需要,还可以基于其他内容)。

+0

谢谢:)不幸的是我刚刚发现我不允许安装Plack,换一种方式。 – Rnet 2013-03-28 13:35:43

+1

@Rnet可以配置任何常见的网络服务器(apache,nginx,lighttpd,可能还有其他许多服务器)来完成这项工作。 – hobbs 2013-03-28 14:19:58

+0

谢谢,我设置了nginx反向代理,接受你的评论为ans :) – Rnet 2013-03-28 15:06:53