2013-05-02 62 views
0

业务情况是,我们希望我们的应用程序每隔一段时间通知第三方,以便在应用程序中发生某个事件时向他们发送一些数据。我们可以说我们是发布商,第三方是订户。如何从java异步发送肥皂消息

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

从周围看,它看起来像我可以使用activeMQ - 但不会要求他们有一个JMS目的地,可以连接到他们的MQ端?

我理想地喜欢的是某种透明的消息代理,它将代表我发送肥皂请求,然后重试,直到获得成功的响应。像这样的东西存在,并且这是一个明智的建筑选择这种情况?

非常感谢!

回答

1

SOAP是一个请求/响应协议。虽然底层传输可以是异步的,但它通常隐藏在它似乎同步的客户端。

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

如果情况并非如此,那么队列仍然是一条路。

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

无论哪种方式,该模式是一样的:

  • 你排队的通知在另一个线程或另一个进程
  • 消费者消费的通知,使SOAP调用
  • 如果SOAP调用失败你重新排队的通知
+0

感谢您的回复 - 这是非常有用的..所以你从你自己的队列消耗,使肥皂调用在一个单独的线程,并重新排队,如果他们失败.. 太好了谢谢! – Bruce 2013-05-02 13:10:52