组合使用ActiveMQ并在IIS / AppFabric中运行的单实例WCF服务的最佳方法是什么?
我们的服务需要支持HTTP传输和ActiveMQ(侦听和发送消息)。我们选择不使用MSMQ,并将使用Spring.Net.NMS。我现在的根本问题是ActiveMQ需要在启动时连接到队列并保持连接,但WAS正在阻碍它的消息激活功能。如果在消息到达之前未激活服务(HTTP / MSMQ等),则没有触发器与AMQ建立连接。
我知道我可以禁用回收行为,我知道我可以使用Windows服务进行自托管。但我想利用AppFabric中的监控和其他功能。我已经使用IServiceBehavior走了这条路,并将其用于其他好东西。但是,在(非AMQ)消息到达之前不会调用该接口。所以它不适用于此。我希望的是ServletContextListeners如何在Java中工作,你可以获得启动和关闭事件。但是在WAS中似乎没有这样的东西......它只是由到达的消息驱动的。
我已经搜索了每一寸网页信息3天,我遇到的唯一一件事就是使用静态类构造(C#)技巧作为触发器。这是一个黑客,但我可以忍受它。它仍然留下了干净利落的问题,我可以在以后找到。
任何人都有可靠的解决方案吗?
答案 0 :(得分:4)
Ladislav提到的对ActiveMQ的直接WCF支持仍然受到支持。在一段时间内,该模块尚未正式发布。但是,您仍然可以从1.5.x分支或主干获取最新版本,并自行编译。
用于Apache.NMS 1.5.0的1.5.x分支: https://svn.apache.org/repos/asf/activemq/activemq-dotnet/Apache.NMS.WCF/branches/1.5.x/
答案 1 :(得分:1)
有direct WCF support for ActiveMQ但我猜它不再发展了。您的问题实际上是IIS / WAS(提供非http协议的托管)托管架构。消息到达时,WAS中的服务始终处于激活状态 - 没有全局启动。原因是WAS托管期望有一直运行侦听器的单独进程(Windows服务),并且此进程具有调用WAS并使用消息级别激活的适配器。我猜你没有ActiveMQ这样的过程,因此你将无法使用WAS中托管的ActiveMQ端点。培养这样的倾听者可能是一项具有挑战性的任务(example for UDP)。
使用IIS 7.5 / AppFabric auto start feature可以避免创建自定义侦听器。 run the code when the application starts还没有很好的记录方式。