通过互联网向ActiveMQ发送消息

时间:2011-02-17 03:02:35

标签: jms activemq

我想通过互联网实现消息传递。但是还没有IP Public。 所以我想问一下这里有关于通过互联网使用JMS向ActiveMQ发送消息的问题吗?

可以吗?

3 个答案:

答案 0 :(得分:3)

是的,它暴露了一个普通的基于TCP的端点(默认情况下在端口61616)。但是,这不是推荐的部署模型 - 更好的模型是使用servlet容器公开基于http的端点,该容器在内部将消息移交给activemq代理。

有很多好的解决方案可以做到这一点 -

  1. Spring IntegrationApache Camel
  2. 使用说Apache CXF(它将为您带来基于标准的界面)公开Web服务端点,该端点将在内部将消息移交给ActiveMQ。

答案 1 :(得分:2)

是的,可以做到。我们目前正在运行一千个“消费者”,通过互联网连接到我们的经纪人。

关于互联网流量的不安全性,我不完全同意:

暴露Web服务与暴露代理一样危险。最后,您永远不会100%确定您自己的代码或代码或底层应用程序(Apache CXF,Web服务器,应用程序服务器,数据库服务器,消息代理)包含可能存在安全风险的缺陷。其次,HTTP与ActiveMQ(Stomp或openwire协议)一样多的TCP流量

话虽如此,您可以采取一切措施使风险尽可能小。

我们已完成以下工作:

  • 用户&密码连接到代理所需的(ActiveMQ支持各种身份验证解决方案,如果需要,您可以自行推送)

  • 将端口切换为其他数字,因此检测更加困难

  • 如果您可以控制消费者,也可以在防火墙中应用IP过滤器,以便ip可以连接到代理(不幸的是,这在我们的案例中是不可能的)

  • 加密邮件

  • 我们还使用令牌添加了应用程序级身份验证。这样,每条消息都在我们自己的应用程序中进行身份验证

- >如果所有这些都实现了,我认为你是非常安全的,作为奖励,你不需要额外的web服务层(如果这个应用程序需要扩展,你将需要与你的经纪人平等地扩展你的web服务。

答案 2 :(得分:1)

普通连接(openwire)应该没问题。坚持使用标准设置比尝试设置Web服务等更简单。只需确保使用SSL加密频道。如果您使用普通密码,它们可能会通过公共网络接收(不太可能,但无论如何) - 这就是我更喜欢SSL的原因。

实际上,ActiveMQ是一种非常好的通过Internet进行通信的方式,因为它支持事务和持久性,使其能够很好地应对网络稳定性问题。

但是,您需要在运行ActiveMQ服务器的计算机上使用公共IP(或某些NAT /端口转发解决方案构成公共IP)才能使其正常工作。