开这次给视频会议做的营帐系统与移动的Boss对接成功,销户等操作移动需要我们提供接口给boss,原理很简单,但是还是写一篇文章贡献一下自己的经验吧。 大概是这样子的架构。 TCPServer(我们提供) (socket/xml调用) 《--------- 移动BOSS系统, 原理就是boss发送xml消息过来,具体是开户还是销户等等比如开户移动发来的xml格式是这样的 - <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
- <OrderMessage>
- <OrderId>12345</OrderId> // Transaction Number
- <MessageBody>
- <Order>
- <OrderType>1</OrderType> // Service Type
- <User> // User Structure
- <Name>02162855709</Name>
- <Password>3eU9ed</Password>
- <Telephone>02162855709</Telephone>
- <Activated>1</Activated>
- <Email>myname@gmail.com</Email>
- <Mobile>13952409898</Mobile>
- </User>
- </Order>
- </MessageBody>
- </OrderMessage>
具体我们就用socket服务器,只要用dom4j解析这些字段就好,然后调用我们系统的Service来开销户, 写一个Socket服务线程 ,这里用到阻塞io,因为系统的开销户的压力不大,线性处理还是处理的过来的。 - Socket datagramSocket = new ServerSocket (port);
- socket = datagramSocket.accept();
- InputStream is = socket.getInputStream();
- String resultStr = null;
- int readIndex = 5 * 1024 * 1024;
- BufferedReader bufferedReader = new BufferedReader(
- new InputStreamReader(is), readIndex);
- char[] charArray = new char[readIndex];
- int read_rst=0;
- PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
- while ((read_rst = bufferedReader.read(charArray))!=-1) {
- try {
- resultStr = new String(charArray, 0, read_rst);
- XmlContent=resultStr;
- XmlContent=XmlContent.trim();
- log.debug(">>>>>>>>>>>>>>>>>>>>>>>>>>>>收到boss消息:"+XmlContent);
- SAXReader reader = new SAXReader();
- Document doc;
-
- doc = reader.read(new ByteArrayInputStream(XmlContent.getBytes("UTF-8")));
- org.dom4j.Element root = doc.getRootElement();
- log.debug(root.getText());
- log.debug(root.getName());
- if(root!=null)
- {
- Element OrderId=root.element("OrderId");
- ordId=OrderId.getStringValue();
- Element MessageBody=root.element("MessageBody");
- Element Order=MessageBody.element("Order");
- Element OrderType=Order.element("OrderType");
-
-
-
- if(OrderType.getStringValue().trim().equals("1"))
- {
- log.debug(">>>>>>>>>>>socket 创建用户");
- Element User =Order.element("User");
- Element Name=User.element("Name");
- Element Password=User.element("Password");
- Element Telephone=User.element("Telephone");
- Element Activated=User.element("Activated");
- Element Email=User.element("Email");
- Element Mobile=User.element("Mobile");
- .......do 开户serveice
- }
很简单吧,其实两个异构系统用底层tcp自己规定解析方式是一种很简单的方法,没有必要一提到异构系统就用到SOAP,WEBSERVICE,简单有时候也可以解决很多问题。
|