如何从java异步发送soap消息

如何从java异步发送soap消息,java,soap,asynchronous,jms,activemq,Java,Soap,Asynchronous,Jms,Activemq,业务情况是,我们希望我们的应用程序每隔一段时间就应用程序中的某个事件通知第三方,并向他们发送一些数据。我们可以说,我们是出版商,第三方是订户 如果他们的soap服务期望soap消息作为通知,那么与他们的服务通信的最佳实践方式是什么?我希望它是异步的,因为我不希望我们的应用程序慢下来通知他们。我还需要它是保证交付,重试,如果他们的服务是下降 通过阅读,看起来我可以使用activeMQ,但这不要求他们有一个JMS目的地,可以在其端连接到MQ吗 理想情况下,我想要的是某种透明的消息代理,它将代表我发送

业务情况是,我们希望我们的应用程序每隔一段时间就应用程序中的某个事件通知第三方,并向他们发送一些数据。我们可以说,我们是出版商,第三方是订户

如果他们的soap服务期望soap消息作为通知,那么与他们的服务通信的最佳实践方式是什么?我希望它是异步的,因为我不希望我们的应用程序慢下来通知他们。我还需要它是保证交付,重试,如果他们的服务是下降

通过阅读,看起来我可以使用activeMQ,但这不要求他们有一个JMS目的地,可以在其端连接到MQ吗

理想情况下,我想要的是某种透明的消息代理,它将代表我发送一个soap请求,并重试,直到得到成功的响应。是否存在类似的情况,对于这种场景来说,这是一个合理的架构选择吗


非常感谢

SOAP是一种请求/响应协议。虽然底层传输可以是异步的,但这通常对看起来是同步的客户机是隐藏的

处理此类通知的最佳方法是完全通过JMS/MQ。但是,这并不假设您可以控制或希望更改客户机,以便它可以使用队列中的消息

如果不是这样的话,那么排队仍然是一条路要走

通知应发布到队列中。进程或线程需要使用该队列中的通知,并使用适当的重试逻辑进行SOAP调用,如果调用失败,该逻辑将重新排队通知。根据您的需求,这可以像内存队列一样简单,或者,如果您需要通知以在进程重新启动后继续运行,可以像ActiveMQ这样的外部队列服务器

无论哪种方式,模式都是相同的:

  • 您将通知排队
  • 另一个线程或另一个进程中的使用者使用通知并进行SOAP调用
  • 如果SOAP调用失败,您可以将通知重新排队

感谢您的回复-这非常有用。。因此,您从自己的队列中进行消费,在单独的线程中进行soap调用,如果失败,则重新对其进行排队。。太好了,谢谢!