можно использовать интерфейс мультиметода в качестве шлюза с одним каналом?Тот же канал для разных методов
Я использую интеграцию пружин 4.1.2.RELEASE.
Различные методы вызова различных методов API на других серверах.
Мой конфиг/источник выглядит как:
The Gateway:
@MessagingGateway
public interface TestService
{
@Gateway(requestChannel="testRequestChannel")
public Test findTestById(String test);
@Gateway(requestChannel="testRequestChannel")
public List<Test> getTests();
.... many more methods ....
}
The Service осущ:
@MessageEndpoint
public class TestServiceImpl
{
@ServiceActivator(inputChannel = "testRequestChannel")
public Test findTestById(String test)
{
...
}
@ServiceActivator(inputChannel = "testRequestChannel")
public List<Test> getTests(String test)
{
...
}
}
модели:
@Service
public class TestModel
{
@Autowired
private TestService testService;
public Test findTestById(String test)
{
return this.testService.findTestById(test);
}
}
Благодарности
Marcel
У меня есть интерфейс с несколькими методами. Для меня звучит ужасно, чтобы создать канал для каждого метода ... Есть ли какие-либо другие решения (простые, как шлюз) для моей проблемы? –
Вам не нужно объявлять каналы, просто дайте им имена unuque. Структура создаст объявления по умолчанию. –
Ну, вы неправильно поняли принципы обмена сообщениями. «Канал» относится к первоклассному гражданину. И его цель - получать сообщения от производителя и доставлять их подписчику. Пожалуйста, прочитайте книгу [(EIP] (http://www.enterpriseintegrationpatterns.com/) для теории. Вы делаете это только с одним каналом, но в этом случае вы должны разместить на нем маршрутизатор и использовать '#gatewayMethod 'SpEL variable, чтобы заполнить заголовок сообщения, который будет использоваться в качестве ключа маршрутизации в этом маршрутизаторе. Однако вы должны предоставлять канал в нисходящем канале в любом случае. Или использовать единую услугу для всех случаев. Именно так работает framewrok! –