2014-09-25 1 views
0

Есть ли элегантный способ определения одного компонента @MessageEndpoint с несколькими методами @ServiceActivator (или что-то в этом роде), где типы аргументов методов неявно используются в качестве полезной нагрузки, тип-фильтр?Несколько методов @ServiceActivator с неявной обработкой маршрутизации полезной нагрузки

Идея состоит в том, чтобы иметь единственную конечную точку обслуживания, которая может обрабатывать различные типы полезных данных, несколько отличающихся без особых усилий, путем отправки по типу аргументов, что облегчает реализацию дополнительных методов обслуживания по линии.

Я знаю о Google Guava EventBus, который отправляет объекты событий любому зарегистрированному методу @Subscribe с соответствующим типом аргумента. В настоящее время я использую этот подход, но мне было интересно, возможно ли это с помощью Spring Integration.

+0

На данный момент вам понадобится маршрутизатор на основе контента. Непонятно, что ваше предложение является хорошим правилом общего назначения; что, если я хочу, чтобы сообщения доставлялись на несколько конечных точек? – chrylis

+0

Чтобы доставить его на несколько конечных точек, вы просто определяете несколько конечных точек. Никто тебя не останавливает ... :) – Robin479

ответ

0

В XML, <service-activator ... ref="foo" /> (без method) будет разрешен метод, основанный на типе полезной нагрузки, если не существует двусмысленностей.

С 4.0 или более поздней версией, вы можете использовать ...

@Bean 
@ServiceActivator(...) 
public MessageHandler foo() { 
    ... 
} 

Возвращение ServiceHandlingFactoryBean с targetObject набором для вашей POJO (опять же, без имени методы).

Обратите внимание, что в этом случае вы должны установить outputChannel на заводских компонентах (атрибут outputChannel в аннотации игнорируется).