Спасибо, что читали раньше времени. В моем основном методе у меня есть 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();
}
}