Java soapweb服务回调体系结构?

Java soapweb服务回调体系结构?,java,.net,web-services,callback,jax-ws,Java,.net,Web Services,Callback,Jax Ws,我对web服务、JAX-WS等非常陌生,所以可能没有问题 因此,我想实现一个web服务,使两个系统进行通信。“客户端”系统对“服务器”系统上生成的事件感兴趣。但“客户端系统”本身就是一个不同应用程序的服务器。服务器是Java(tomcat中的WAR)。客户端是.Net 应该只有一个客户机系统,但是客户机系统中有几个客户机进程,每个进程都对不同类别的事件感兴趣 我将实现服务器端和测试客户端。其他人将实现.Net代码 运行顺序应沿着以下路线: 服务器正在运行 客户端启动对话,“注册”到服务器,并请求

我对web服务、JAX-WS等非常陌生,所以可能没有问题

因此,我想实现一个web服务,使两个系统进行通信。“客户端”系统对“服务器”系统上生成的事件感兴趣。但“客户端系统”本身就是一个不同应用程序的服务器。服务器是Java(tomcat中的WAR)。客户端是.Net

应该只有一个客户机系统,但是客户机系统中有几个客户机进程,每个进程都对不同类别的事件感兴趣

我将实现服务器端和测试客户端。其他人将实现.Net代码

运行顺序应沿着以下路线:

  • 服务器正在运行
  • 客户端启动对话,“注册”到服务器,并请求一些初始数据
  • 服务器保留已注册客户端端点的列表
  • 在服务器中有一个侦听器,当某些事件发生时会收到通知。然后,它将浏览已注册客户端的列表,并将事件转发给每个客户端
  • 在某些情况下,客户端可以“注销”no,并通知服务器它不想再接收事件
  • 首先,这听起来是否合理可行

    是否有一个标准的内置机制,使用SOAP(服务器上的JAX-WS,客户机上的.Net n提供的任何东西),服务器可以使用该机制从客户机获取回调端点

    例如,我使用RMI做了一些非常类似的事情,在本例中,客户机只需向自身发送一个远程引用,服务器只需存储ant稍后引用的内容

    最后,是否有一个标准库来存储端点引用,进行(集体)回调,并可能使列表保持最新,从而删除不响应某些“ping”调用的客户端


    为清楚起见,请注意:我需要的不仅仅是带有回调的异步方法:来自客户端的一条消息将生成从服务器到客户端的许多回调消息。

    异步客户端通过使用来支持基于WSDL的服务。就你而言,我认为要求相对比较复杂

    Oracle fusion中间件概述了一个可以帮助您的场景。它详细介绍了一种方法,该方法允许客户端发送生成HTTP 202(已接受)的请求,然后客户端在消息队列上等待响应。在您的情况下,可以从下面显示的场景中调整场景

    为每个回调类别启动多个响应队列。客户机可以通过为队列提供客户机和类别ID来过滤它们。这将作为每个客户机或在每个客户机下管理的进程的回调机制。MDB可以由文件存储或DB存储支持,以确保可靠性和一次性交付

    当然,您不需要Oracle fusionware来实现这一点。您可以使用RabbitMQ或Redis(与事务一起)确认在客户端上收到消息。如果您的客户希望取消注册,请拨打电话并停止收听队列


    我不知道有什么行业标准适合您的场景,但我相信此解决方案应该适合您。

    您似乎希望实现通知功能来通知任意匿名客户端

    我建议您首先考虑如何使用SOAP消息传递信息。然后,您可以考虑如何使用java -jax—WS或其他非标准库来实现这一点。关键是,传输SOAP消息可能需要很大的限制或假设。例如,防火墙可能会阻止您的HTTP消息,客户端可能“只是客户端”,无法以服务器角色接收SOAP通知请求

    注意:JAX-WS2.0中定义了异步回调机制,其中服务获取客户端的端点引用。这与Deepak Bala描述的WebLogic/Fusion专有解决方案提供的功能相同。Websphere有一个类似的专有异步解决方案。这些都不能满足您的需求,因为它们只允许每个请求有一个响应

    SOAP选项:

  • 专有SOAP消息-“100%自己动手选项”

    您可以设计完整的SOAP负载模式和消息交换模式

    如果知道客户端的SOAP端点地址,则可以将通知从服务器推送到客户端。客户机可以在原始SOAP请求负载内传输其SOAP端点地址。稍后,服务器可以向客户机发送SOAP请求

    问题/假设:(1)从服务器到客户端的请求需要SOAP/HTTP通信路径——当存在防火墙时,不保证;(2) 客户端需要知道您的通知模式——事实上,客户端需要充当服务端点来接收SOAP通知请求。如果您试图支持任意匿名客户机,那么这是两个大的假设——SOAP“仅支持”这并不是两端都需要详细设计的东西。事实上,要以服务类型安全的方式实现这一点,客户机实际上应该声明自己的服务WSDL接口,以便您可以调用它。(3) 正如前面所暗示的,许多客户端都是“只是客户端”——它们可能没有HTTP服务器来接受SOAP请求

    因此,为了让专有的“推送”通知发挥作用,双方都需要访问服务器,并且都需要发布其SOA接口

    或者,您可以将通知拉到客户端。客户端可以使用对正在阻塞或轮询的服务器的通知请求。服务器可以响应通知,也可以不响应或出错

    问题/假设:(1)HTTP服务器(即SOAP服务器)通常不支持阻止请求,这意味着您必须进行轮询;(2) 客户端需要知道您的通知模式——事实上,客户端需要充当服务端点来接收SOAP通知请求。