java - java应用程序和jax-ws Web服务之间的线程间通信

标签 java multithreading web-services jax-ws

我的 jax-ws Web 服务(在收到客户端请求后)向后端遗留平台发送请求(通过套接字),然后等待 20 秒响应。

在发出该请求之前,它会使用其唯一的交易编号更新表。

一个单独的监听器线程(独立的 Java 应用程序)正在该套接字上等待响应,每个响应中都将包含事务号,以识别与哪个请求(之前发送的)相关联。

这个独立的 Java 应用程序如何与 Web 服务中等待的线程进行通信,告知其响应已到达并且可以继续处理。

目前我认为监听器线程可以更新表(基于事务号)以指示响应已到达。 Web 服务线程可以不断轮询(每 2 秒检查一次)数据库是否有响应到达。

在这种情况下我正在寻找一些推送通知而不是轮询。当我的 Web 服务线程的响应到达时,如何才能收到通知。

最佳答案

假设服务请求并发出套接字请求的线程和接收套接字响应的线程都在同一个 jvm 中:
您可以使用标准的 Java 等待/通知模式。
http://docs.oracle.com/javase/tutorial/essential/concurrency/guardmeth.html

基本上,您的请求/套接字线程将在单例(或类似)映射中创建一个对象(“锁定”对象),关键是您的唯一交易号。然后该线程将等待该对象。这会阻塞该线程,直到另一个线程对该事务 ID 的锁对象进行通知。
请注意,锁定对象可以只是一个对象。
您还可以设置等待超时以避免永远等待。

然后,您的另一个线程将获取事务 ID 的锁对象并对其进行通知。然后,这将解除对第一个线程的阻塞。
如果第二个线程没有找到其事务 ID 的锁对象,则说明出现了问题,您必须记录错误或类似错误。

Ps 由于 map 是共享资源,因此您可能需要 ConcurrentHashMap。否则,您可能会遇到多个线程同时更新的问题。

关于java - java应用程序和jax-ws Web服务之间的线程间通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11478524/

相关文章:

java混淆器: library doesnt work after optimization

java - 没有日期的排序时间

C++静态与线程存储持续时间销毁顺序

windows - 如何在维持当前 session 状态的同时在Windows命令中使用Start-Job

java - 如何让 clojure 向套接字写入响应?

java - 在 Jython 2.5 中同时执行多个函数

java - 如何在另一个Jar中多次调用具有另一个Jar中的参数的Java类

web-services - SOAP、http Web 服务请求和 url

c# - WCF CustomBinding 客户端使用的 JAVA Web 服务 - 响应时出现 SAML 证书错误 - 找不到证书?

java - 带有 SOAP 1.1 的 CXF 对于请求中发送的文本是否有最大内容长度?