Spring MessageListener несколько сообщений - PullRequest
2 голосов
/ 08 июля 2011

Я использую Spring MessageListener , который прослушивает очередь JMS для обработки сообщений, содержащих XML.

My 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 ]

3 голосов
/ 08 июля 2011

Есть куча архитектурных вопросов, заданных вашим вопросом. Вы хотите, чтобы этот слушатель mesasge сделал работу или передал ее другому компоненту? Есть ли транзакционные соображения в игре? У вас есть ограничения памяти - то есть вы хотите потоковую обработку XML или нет? Do

Хорошая новость заключается в том, что у вас есть множество кусочков этой головоломки, доступных вам в Spring.

Простой следующий шаг - использовать Spring Object XML Marshalling (OXM), выбрать один из методов и подключить маршаллер к вашему бину слушателя.

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

Другой метод - использовать интерфейс Spring ApplicationEvent, читать сообщения, поступающие из очереди, и публиковать их внутри для слушателей определенных типов. Это можно использовать в сочетании с указанным выше распределением объектов.

И последнее, но не менее важное: если это веб-службы SOAP - вы можете взглянуть на Spring WS, он использует аналогичные контейнеры сообщений для извлечения сообщений из сети, их маршалинга и вызова конечной точки ws (то есть интерфейс службы, который удовлетворяет этому контракту интерфейса).

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

1 голос
/ 08 июля 2011

Проект Spring Integration настоятельно рекомендуется для решения подобных проблем. По сути, вам потребуется реализовать входящий шлюз jms для получения вашего сообщения. Затем вы можете преобразовать его в объект в этой точке, а затем направить сообщение в соответствующий компонент-активатор службы, который может сопоставиться с вашим экземпляром и методом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...