【问题标题】:Exposing a Publish/Subscribe Message Queue to the Internet向 Internet 公开发布/订阅消息队列
【发布时间】:2015-05-14 20:04:20
【问题描述】:
我对使用带有发布/订阅功能的消息队列(ZeroMQ、RabbitMQ、redis 等)非常感兴趣,这样我就可以向客户端发送推送消息。实际上,我需要客户端能够从开放的 Internet 订阅,并且 MQ 主机是唯一可以发布的主机。但问题似乎是,由于其固有的开放性,现有的解决方案都没有设计用于开放 Internet,并且都建议将其置于防火墙/前端之后,这会破坏 MQ 的有用性(防火墙会阻止更改 IP 的客户端和 REST API 等前端将不允许订阅,本质上会将推送变为轮询)。
那么对于这个问题是否有任何解决方案/替代方案可以让我这样做?消息队列是正确的解决方案吗(我研究过使用非阻塞套接字,但我宁愿避免处理原始套接字)?
【问题讨论】:
标签:
security
push-notification
redis
message-queue
nonblocking
【解决方案1】:
我正在研究类似的东西,并确实搜索了一个开源解决方案,但没有成功。我目前的解决方案是有一个用于发布和订阅消息的 Restful 接口。我正在使用 java 来实现它并创建了一个 Rest 资源以允许客户端注册一个 HTTP 端点,该端点本身可以是一个接受 post 消息的 rest 资源。一旦客户端注册了他订阅特定资源的意图并提供了 Rest 端点,我就使用 RabbitMq 直接交换将消息路由到队列,队列进而触发向所有订阅者发布消息。
此解决方案确实对我有用,您可以尝试相同的模型。
我已经使用 java Observer 模式来监听队列上的新消息并触发新的 http 请求。
由于这是一个基于 rest 的实现,您可以用任何语言实现它。