将发布/订阅消息队列公开到Internet

时间:2015-03-12 15:18:34

标签: security push-notification redis message-queue nonblocking

我一直对使用发布/订阅的消息队列(ZeroMQ,RabbitMQ,redis等)非常感兴趣,这样我就可以向客户端发送推送消息。实际上,我需要客户能够从开放的Internet订阅,并且MQ主机是唯一可以发布的主机。但问题似乎是,由于其固有的开放性,所有存在的解决方案都没有被设计用于开放的互联网,并且所有解决方案都建议放在防火墙/前端之后,这会破坏MQ的有用性(防火墙会阻止来自更改IP的客户端和像REST API这样的前端将不允许订阅,并且实质上会将推送转为民意调查。

那么这个问题的解决方案/替代方案是否允许我这样做?并且是一个消息队列正确的解决方案(我使用非阻塞套接字,但我宁愿避免处理原始套接字)?

1 个答案:

答案 0 :(得分:1)

我正在寻找类似的东西并且搜索了一个没有成功的开源解决方案。我目前的解决方案是使用Restful接口发布和订阅消息。我正在使用java来实现它并创建了一个Rest资源,允许客户端注册一个HTTP端点,它本身可以是一个接受post消息的rest资源。一旦客户注册了他订阅特定资源并提供Rest端点的意图,我就使用RabbitMq直接交换将消息路由到队列,这反过来又会向所有订户发送消息。

此解决方案对我有用,您可以尝试使用相同的模型。

我使用了java Observer模式来侦听队列中的新消息并触发新的http请求。

由于这是一个基于休息的实现,您可以用任何语言实现它。