2011-02-17 136 views
4

发送消息,ActiveMQ的我想要实现通过互联网通讯。但还没有IP Public。 所以我想问一个关于使用JMS通过互联网发送消息给ActiveMQ的人吗?通过互联网

能不能做到?

回答

3

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

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

  1. Spring IntegrationApache Camel
  2. 曝光用说Apache CXF(这将带给你一个基于标准的接口),一个web服务端点,它会在内部交接该消息给ActiveMQ。
+0

你能给我一些关于使用TCP的弱点的解释吗?谢谢 – 2011-02-21 04:53:38

2

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

至于流量在互联网上不安全,我不完全一致:

暴露一个Web服务是一样riskfull作为露出经纪人。最终,您从未100%确信自己的代码或代码或底层应用程序(Apache CXF,Web服务器,应用程序服务器,数据库服务器,消息代理)包含可能存在安全风险的缺陷。二至,HTTP是一样ActiveMQ是尽可能多的TCP流量(践踏或openwire协议)

话虽这么说,你可以采取一切措施,使风险尽可能小。

我们做了以下内容:

  • 用户&密码才能连接到代理(ActiveMQ的suports广泛验证的解决方案,如果需要,你可以滚你自己)

  • 开关端口为不同的号码,以便检测是比较困难的

  • ,如果你有超过消费者藏汉控制,防火墙应用IP过滤器的可连接到哪个IP经纪人(不幸的是,这是不是在我们的情况可能)

  • 加密邮件

  • 我们已经增加了藏汉使用令牌的应用级认证。这样一来,每个消息都在我们自己的应用程序认证

- >如果所有的这些都实现,我认为你是非常安全的,并作为奖励,你不需要web服务的额外层(如果这应用程序需要扩展,您需要与您的代理商平等扩展您的web服务。

1

简单连接(openwire)应该没问题。坚持标准设置要比试图设置web服务更简单。只要确保使用SSL加密频道。如果你使用简单的密码,他们可能会被公共网络接收(不过不管怎样) - 这就是为什么我更喜欢SSL。实际上,ActiveMQ是通过互联网进行通信的一种非常好的方式,因为它支持事务和持久性,使其能够很好地处理网络稳定性问题。

但是,您需要在运行ActiveMQ服务器的计算机上运行公共IP(或某些NAT /端口转发解决方案,形成一个公共IP)。