最近工作中负责银行监管系统的对接。在申请银行测试环境的时候,流程复杂繁琐,耗费时间长。 我负责开发和测试银行的接口,但是开发阶段必须连接银行环境,但是银行环境又不能直接到本地。如果指定了本地端口,等测试验收时环境又不一样。银行回复给我们消息时服务地址又要改变,申请银行更改端口流程又负责。所以想在开发阶段和测试验收阶段使用同一个服务端,我采用了代理的方式。
当在本地local 端想通过中间proxy 来发送和接收请求到银行remote端,就可以使用代理。 就像我们平时使用的vpn一样,连接到vpn服务器上,然后通vpn服务器来转发和接收你的请求。
在netty的example中就有简单的例子。我的例子就是从里面改变而来。
ProxyConfig.properties 配置端口:
localIp=221.228.241.106
localPort=8443
ProxyIp =192.168.2.13
ProxyPort =54951
remoteIp=202.108.57.118
remotePort=35053
HexDumpProxy.java 代理服务器端:
public final class HexDumpProxy
{
private static Logger logger = LoggerFactory.getLogger(HexDumpProxy.class);
//中间IP和端口
static final String PROXY_IP =ProxyConfig.getInstance().getProxyIp();
static final int PROXY_PORT = Integer.parseInt(ProxyConfig.getInstance().getProxyPort());
public static void main(String[] args) throws Exception
{
logger.info("**********************启动代理 ********************** Ip:{} port:{}",PROXY_IP,PROXY_PORT);
EventLoopGroup bossGroup = new NioEventLoopGroup(1);
EventLoopGroup workerGroup = new NioEventLoopGroup();
try
{ //这里启动代理服务器端,用来接收local端和remote端的消息
//把从来自local端的消息转发到remote端
//把从来自remote端的消息转发到local端
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class)
.handler(new LoggingHandler(LogLevel.INFO))
.childHandler(new HexDumpProxyInitializer())
.childOption(ChannelOption.AUTO_READ, false)
.bind(new Inet