весенняя интеграция опубликовать подписаться между бобами - PullRequest
0 голосов
/ 27 апреля 2018

Спасибо, что читали раньше времени. В моем основном методе у меня есть PublishSubscribeChannel

@Bean(name = "feeSchedule")
public SubscribableChannel getMessageChannel() {
    return new PublishSubscribeChannel();
}

В службе, которая выполняет длительный процесс, она создает график оплаты, в который я вставляю канал в

@Service
public class FeeScheduleCompareServiceImpl implements FeeScheduleCompareService {

    @Autowired
    MessageChannel outChannel;

    public List<FeeScheduleUpdate> compareFeeSchedules(String oldStudyId) {
    List<FeeScheduleUpdate> sortedResultList = longMethod(oldStudyId);
    outChannel.send(MessageBuilder.withPayload(sortedResultList).build());
        return sortedResultList;
    } 
}

Теперь это часть, с которой я борюсь. Я хочу использовать завершаемое будущее и получить полезную информацию о событии в будущем в другом весеннем бине. Мне нужно будущее А, чтобы вернуть полезные данные из сообщения. Я думаю, что хочу создать ServiceActivator в качестве конечной точки сообщения, но, как я уже сказал, мне нужно, чтобы он возвратил полезную нагрузку для будущего A.

@org.springframework.stereotype.Service
public class SFCCCompareServiceImpl implements SFCCCompareService {
     @Autowired
    private SubscribableChannel outChannel;

     @Override
    public List<SFCCCompareDTO> compareSFCC(String state, int service){
    ArrayList<SFCCCompareDTO> returnList = new ArrayList<SFCCCompareDTO>();
    CompletableFuture<List<FeeScheduleUpdate>> fa =  CompletableFuture.supplyAsync( () ->
            {  //block A   WHAT GOES HERE?!?!
                    outChannel.subscribe()
            }
    );
    CompletableFuture<List<StateFeeCodeClassification>> fb =  CompletableFuture.supplyAsync( () ->
            {  
                  return this.stateFeeCodeClassificationRepository.findAll();       
            }
    );
    CompletableFuture<List<SFCCCompareDTO>> fc = fa.thenCombine(fb,(a,b) ->{
        //block C
        //get in this block when both A & B are complete
        Object theList = b.stream().forEach(new Consumer<StateFeeCodeClassification>() {
            @Override
            public void accept(StateFeeCodeClassification stateFeeCodeClassification) {
                a.stream().forEach(new Consumer<FeeScheduleUpdate>() {
                    @Override
                    public void accept(FeeScheduleUpdate feeScheduleUpdate) {
                        returnList new SFCCCompareDTO();
                    }
                });
            }
        }).collect(Collectors.toList());
        return theList;
    });
    fc.join();
    return returnList;
}

}

Думал, что будет активатор службы, как:

@MessageEndpoint
public class UpdatesHandler implements MessageHandler{

    @ServiceActivator(requiresReply = "true")
    public List<FeeScheduleUpdate> getUpdates(Message m){
        return (List<FeeScheduleUpdate>) m.getPayload();
    }
}

1 Ответ

0 голосов
/ 27 апреля 2018

Ваш вопрос неясен, но я постараюсь помочь вам с информацией.

Spring Integration не обеспечивает поддержку CompletableFuture, но обеспечивает асинхронную обработку и ответы.

См. Асинхронный шлюз для получения дополнительной информации. А также см. Асинхронный сервисный активатор .

Кстати,

outChannel.subscribe() должен идти с обратным вызовом MessageHandler.

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