/** * Find messages in given state that are eligible for processing. * * @param msgState the state. * @return list of messages, empty if none messages are eligible. */ protected List<Message> findMessagesForProcessing(MsgStateEnum msgState) { long saveTimeInSeconds = getSaveTimeInSeconds(msgState); if (saveTimeInSeconds < 0) { LOG.trace("Messages in state [{}] will be skipped, as configured to be kept indefinitely.", msgState); return Collections.emptyList(); } final MessageFilter messageFilter = new MessageFilter(); messageFilter.setState(msgState); messageFilter.setLastChangeTo(Instant.now().minusSeconds(saveTimeInSeconds)); long limit = messagesTechnicalLimit.getValue(); LOG.trace("Will search for messages with filter {}, and technical limit {}.", messageFilter, limit); final List<Message> messageList = messageService.findMessagesByFilter(messageFilter, limit); if (limit == messageList.size()) { LOG.info("Reached limit for one iteration of job {}, probably there are other messages eligible" + "to be processed. Will be processed in the next iteration.", limit); } return messageList; }
/** * List messages, by given filter. * * @param messageFilter the filter to filter messages. * @return custom collection wrapper with message list elements. */ @GetMapping(produces = {"application/xml", "application/json"}) @ResponseStatus(HttpStatus.OK) @ResponseBody public MessageCollectionWrapper list(final MessageFilterRpc messageFilter){ Constraints.notNull(messageFilter.getReceivedFrom(), "The receivedFrom is mandatory."); Constraints.notNull(messagesLimit.getValue(), "the messagesLimit must be configured."); final MessageFilter filter = MessageFilterRpc.toMessageFilter().convert(messageFilter); LOG.trace("List messages by filter [{}].", filter); // fetch messages from messageService final List<Message> messageList = messageService.findMessagesByFilter(filter, messagesLimit.getValue()); return new MessageCollectionWrapper( MessageListItemRpc.fromMessage(), messageList, messagesLimit.getValue(), messageList.size() ); }