我想将一个消息队列暴露给互联网,以便客户端应用程序可以与我们的一些后端服务进行通信。
由于出于安全原因,我不想直接公开jms端点。此外,普通的HTTP传输可以避免将jms插件分发到异构客户端应用程序(.net,java,javascript)。
我看了一下ActiveMQ的“内置”REST界面:
http://activemq.apache.org/rest.html
但是在测试中,我发现演示不可靠(即“我的消息在哪里?”)。此外,关于如何将演示推向“真正的”实现,还没有详细记录。
由于这听起来像企业集成模式中的经典“桥”模式,我看了主要的开源ESB / SOA集成引擎:
在这三个文档中,最清晰的文档似乎是ServiceMix's,它提供了一个In-only消息模式,我需要发送POST和GET消息。
不幸的是,对于评估条款,我似乎不得不深入研究每个实现和配置。我意识到开箱即用的设置可能太多了,但我宁愿不学习所有这三个,只考虑哪一个最符合我的需求。所以......
答案 0 :(得分:5)
您可以随时查看Apache Camel Project。 它允许您将来自Http,Web服务等的请求公开并路由到JMS队列。
虽然我投票支持威尔的回答。 servlet真的是去这里的方式。
答案 1 :(得分:2)
或者你可以编写一个servlet并用几十行代码来完成。
答案 2 :(得分:1)
我有一个类似的目标,为客户端公开一个轻量级的http资源。它实际上充当适配器,它接受简单的textmessages并将它们简单地异步放入队列,以便以后处理。我到目前为止的研究结果(仅补充现有答案):
HornetQ REST
很好,但是calles必须知道目的地名称,这对我的用例来说是不受欢迎的。 Documentation
HJB(HTTP JMS Bridge)
也不符合我的需要,除了这个文档不好理解,它也不再维护。 Website
我可能最终编写自己的适配器,使用一些瘦servlet /等。或者Apache Camel。
答案 3 :(得分:0)
WSO2 ESB提供开箱即用的样品,您可以在几分钟内试用。毕竟它的100%免费和开源,只需下载分发并运行它。 (没有两种版本的商业和社区的痛苦)
根据您的要求,wso2提供了一个开箱即用的示例[1],您可以使用外部消息代理(如活动mq等)配置ESB,并将其公开为任何其他服务[2]。 (SOAP Web服务/ REST服务等)。
试一试。
[1] http://wso2.org/project/esb/java/4.0.0/docs/samples/transport_samples.html#Sample251 [2] http://techfeast-hiranya.blogspot.com/2009/07/integrating-apache-activemq-with-wso2.html