我有一个Java应用程序,我通过RESTful Web服务提供。我想创建一个机制,以便客户端可以注册事件通知。问题是无法保证客户端程序将是Java程序,因此我无法使用JMS(即如果每个客户端都是Java应用程序,那么我们可以允许客户端订阅JMS主题并在那里收听通知消息。)
用例大致如下:
正如我上面提到的,如果所有客户端都是Java应用程序,我知道如何做到这一点 - 设置一个客户可以收听通知消息的主题。但是我不能使用这种方法,因为许多客户端可能无法收听通知消息的JMS主题。
这里的任何人都可以告诉我这个问题通常是如何解决的吗?我可以使用RESTful API提供什么机制?
答案 0 :(得分:8)
我可以想到四种方法:
Twitter方法:您注册客户端,然后定期使用GET回电以检索任何通知。
客户端描述了在发出注册请求时它希望如何接收通知。这样你可以允许JMS为那些能够处理它并回退到电子邮件或类似的那些那些不能。但
在注册请求期间获取一个URL,并在收到通知时单独POST回每个客户端。几乎没有Pub / Sub,但效果会相似。当然,您假设客户正在收听这些通知,并根据您的规范实施了客户。
购买IBM WebSphere MQ(MQSeries)。有史以来最好的IBM产品不是REST,但它非常适合这样的多平台集成。
答案 1 :(得分:4)
我们遇到此问题,需要对相对较少的侦听器进行低延迟异步更新。我们的两种替代解决方案是:
答案 2 :(得分:3)
在对RESTful请求的响应中,您可以提供个性化的RESTful URL,客户端可以监视更新。
也就是说,你有一个URL(/Signup.htm,比方说),它接受客户端的信息(如果合适,id,要监视的对象的id)并返回一个自定义的URL(/ Monitor / XYZPDQ),其中XYZPDQ是为该特定客户端创建的UUID。客户端可以在某个时间间隔轮询该自定义URL,如果更新发生,它将收到通知。
如果您不关心客户端是谁(并且不想创建这么多UUID),您可以为每个可能需要监控的对象分别使用RESTful URL,并且“注册”URL会只需返回正确的那个。
正如John Saunders所说,你无法通过HTTP真正做到更直接的发布/订阅。
答案 3 :(得分:1)
如果不接受投票,我会考虑使用web-sockets(例如see here)。虽然说实话,我喜欢idea suggested by user189423或multipart content-type
的chunked transfer-encoding as well.