Spring MessageListener多个消息

时间:2011-07-07 23:23:00

标签: web-services spring jms

我正在实现一个正在侦听JMS队列的Spring MessageListener 来处理包含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

2 个答案:

答案 0 :(得分:3)

你的问题引发了许多架构问题。你想让这个mesasge监听器做这项工作,还是把它交给另一个组件?是否有交易考虑因素?您是否有内存限制 - 即您是否需要基于流的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

答案 1 :(得分:1)

强烈建议

Spring Integration project解决此类问题。实际上,您必须实现一个jms入站网关来获取您的消息。然后您可以将此转换为对象,然后将消息路由到相应的服务激活器组件,该组件可以映射到您的实例和方法。 / p>