【问题标题】:Spring MessageListener multiple MessagesSpring MessageListener 多条消息
【发布时间】:2011-07-07 23:22:59
【问题描述】:

我正在实现一个 Spring MessageListener,它正在侦听 JMS 队列以处理包含 XML 的消息。

我的 bean ProposalSOAListener 将处理来自队列的大约 5 个或更多 XML 消息。我的代码如下。

有没有办法在这个类上指定不同的方法来处理不同的 XML 消息?

public class ProposalSOAListener implements MessageListener {

    public void onMessage(Message message) {

        if (message instanceof TextMessage) {
            try {
                System.out.println(((TextMessage) message).getText());
            } catch (JMSException ex) {
                throw new RuntimeException(ex);
            }
        }
        else {
            throw new IllegalArgumentException("Message must be of type TextMessage");
        }
    }

} // end of ProposalSOAListener class

【问题讨论】:

  • 这5条消息有什么区别?
  • 它们都包含关于提案请求的不同负载 XML 消息。示例 CreateProposalRequest.xml GetProposalRequest、AddStructuredDataRequest 等

标签: web-services spring jms


【解决方案1】:

您的问题提出了很多架构问题。您希望这个消息侦听器完成这项工作,还是将其交给另一个组件?是否有交易方面的考虑?您是否有内存限制 - 即您是否想要基于流的 XML 处理?做

好消息是,在 Spring 中,您可以使用这个难题的很多部分。

一个简单的下一步是使用 Spring Object XML Marshalling (OXM),选择其中一种技术,然后将 marshaller 连接到您的侦听器 bean。

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/oxm.html

另一种技术是使用 Spring ApplicationEvent 接口,读取来自队列的消息,并在内部将它们发布到特定类型的侦听器。这可以与上述对象编组结合使用。

最后但同样重要的是,如果这是 SOAP Web 服务 - 您可以查看 Spring WS,它使用类似的消息容器从线路中提取消息、编组它们并调用 spring ws 端点(即满足该接口契约的服务接口)。

http://static.springsource.org/spring-ws/sites/2.0/reference/html/server.html#d4e907

【讨论】:

  • 哇;这是一口。感谢您提供所有这些信息,我将研究您的建议,以确定最适合我的情况。
【解决方案2】:

Spring Integration project 强烈推荐用于此类问题。本质上,您将必须实现一个 jms 入站网关来获取您的消息。然后您可以在此时将其转换为一个对象,然后将消息路由到适当的服务激活器组件,该组件可以映射到您的实例和方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    • 2015-10-27
    • 1970-01-01
    • 2017-02-04
    • 2020-12-20
    • 1970-01-01
    • 2021-08-06
    相关资源
    最近更新 更多