【问题标题】:How to connect to ActiveMQ on startup with WCF and IIS如何在启动时使用 WCF 和 IIS 连接到 ActiveMQ
【发布时间】:2011-06-10 12:38:44
【问题描述】:

结合使用 ActiveMQ 并在 IIS/AppFabric 中运行的单实例 WCF 服务的最佳方式是什么?

我们的服务需要同时支持 HTTP 传输和 ActiveMQ(侦听和发送消息)。我们选择不使用 MSMQ,将使用 Spring.Net.NMS。我现在遇到的基本问题是 ActiveMQ 需要在启动时连接到队列并保持连接,但是 WAS 的消息激活功能妨碍了它。如果服务在消息到达(HTTP/MSMQ 等)之前未激活,则不会触发与 AMQ 的连接。

我知道我可以禁用回收行为,并且我知道我可以使用 Windows 服务进行自托管。但我想利用 AppFabric 中的监控和其他功能。我已经使用 IServiceBehavior 走上了这条路线,并将把它用于其他好东西。但是在(非 AMQ)消息到达之前,不会调用该接口。所以它不会为此工作。我希望的是类似于 ServletContextListeners 在 Java 中的工作方式,您可以在其中获得启动和关闭事件。但在 WAS 中似乎不存在这样的东西......它仅由到达的消息驱动。

我已经搜索了 3 天的每一寸网络信息,我唯一遇到的就是使用静态类构造 (C#) 技巧作为触发器。这是一个黑客,但我可以忍受它。它仍然留下干净关闭的问题,我可以稍后解决。

有人对此有可靠的解决方案吗?

【问题讨论】:

    标签: wcf startup activemq appfabric


    【解决方案1】:

    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/

    查看说明: http://activemq.apache.org/nms/source.html

    【讨论】:

      【解决方案2】:

      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 也没有很好的记录方式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-24
        • 2012-08-22
        • 2022-06-27
        • 2010-10-17
        • 2016-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-20
        相关资源
        最近更新 更多