如何从java异步发送soap消息

时间:2013-05-02 09:05:09

标签: java soap asynchronous jms activemq

业务情况是我们希望我们的应用程序在我们的应用程序中发生某个事件时偶尔通知第三方,并向他们发送一些数据。我们可以说我们是出版商而第三方是订阅者。

如果他们有肥皂服务期待肥皂信息作为通知,那么与他们的服务沟通的最佳做法是什么?我希望它是异步的,因为我不希望我们的应用程序减速以通知它们。我还需要保证交付,如果他们的服务失败则重试。

从阅读开始,看起来我可以使用activeMQ - 但不会要求他们拥有一个可以连接到MQ的JMS目标吗?

我理想的是某种透明的消息代理,它会代表我发送一个soap请求,重试直到它获得成功的响应。这样的事情是否存在,并且对于这种情况来说是一个明智的建筑选择吗?

非常感谢!

1 个答案:

答案 0 :(得分:1)

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

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

如果不是这种情况,那么队列仍然是可行的方法。

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

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

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