在互联网世界中,由于软件,网络,机器等各种无稳定因素,一个SOAP消息可能会发生传输失败。如果这是一个天气预报的消息,那么失败还不会造成太大影响,但如果消息是有关银行操作,比如转账,消息的传输不可靠就可能会导致用户的损失。

因为上述原因,WS-ReliableMessaging和OASIS标准,规定了一个模块化机制,确保消息传输的可靠性。

  1. 消息在源与目的地之间,消息一定有且仅有一次传递成功。也可以规定消息最少传递一次。
  2. 消息可以存在顺序性。
  3. 消息的时效性。

接下来,我将使用Metro框架来实现可靠消息。



Metro的安装

首先,若想使用Metro引擎,就必须先安装Metro。Metro的安装步骤可以从https://metro.java.net/guide/ch02.html#mustanga3 找到。



开启可靠消息

开启可靠消息的方法很简单,基于之前开发webservice的步骤,开启可靠消息只需要修改server端。开启方法有两种:

  1. 使用WSIT配置文件,声明policy
  2. 直接在WSDL中声明policy

policy如下:

<definitions ....>
  <wsp:Policy wsu:Id="NewWebServicePortBindingPolicy" xmlns:wsrmp="http://docs.oasis-open.org/ws-rx/wsrmp/200702" xmlns:net35rmp="http://schemas.microsoft.com/ws-rx/wsrmp/200702">
    <wsrmp:RMAssertion>
      <wsp:Policy>
        <wsrmp:DeliveryAssurance>
          <wsp:Policy>
            <wsrmp:ExactlyOnce/>
            <wsrmp:InOrder/>
          </wsp:Policy>
        </wsrmp:DeliveryAssurance>
      </wsp:Policy>
    </wsrmp:RMAssertion>
    <net35rmp:InactivityTimeout Milliseconds="700000"/>
    <wsam:Addressing/>
  </wsp:Policy>

上面表明使用可靠消息,消息仅能也必须传输成功一次。消息必须按照顺序。活跃时间为700000.

SEI开发,sun-jaxws.xml编辑,打包部署,均与以往相同。



使用NetBeans IDE快速开发WebService

在之前这么多篇webservice开发文章中,都没有用到NetBeans,主要是为了能摆脱傻瓜式开发,增强对JAX-WS的理解。随着接触Metro的高级功能,裸写webservice是一件复杂的事情了。这时候,可以使用NetBeans加快开发。

在NetBeans中,开发metro webservice是一件非常简单的事情。



创建JavaWeb项目

服务器端的webservice都是由war所提供,所以首先需要创建一个web项目。



创建webservice

右键点击项目,选择new,再选择web service. 此操作会创建一个web service和SEI。

当创建完web service以后,会在项目的web services目录下面看到新创建的web service。

右键点击创建好的web service, 选择Edit Web Service Attributes。

在弹出的dialog中,选择web service的功能:

MES服务器是什么 met service_配置文件

可以点击Advanced来声明更多属性。

点击保存以后,会生成WSIT配置文件。

最后开发完SEI,便可以打包部署了。