public Integer getSequenceNumber() { Integer sequenceNumber = this.get(SEQUENCE_NUMBER, Integer.class); return (sequenceNumber != null ? sequenceNumber : 0); }
public Object getId() { return this.get(ID); }
public Long getTimestamp() { return this.get(TIMESTAMP, Long.class); }
public Integer getSequenceSize() { Integer sequenceSize = this.get(SEQUENCE_SIZE, Integer.class); return (sequenceSize != null ? sequenceSize : 0); }
public Object getCorrelationId() { return this.get(CORRELATION_ID); }
public MessagePriority getPriority() { return this.get(PRIORITY, MessagePriority.class); }
public Long getExpirationDate() { return this.get(EXPIRATION_DATE, Long.class); }
public Object getReplyChannel() { return this.get(REPLY_CHANNEL); }
public Object getErrorChannel() { return this.get(ERROR_CHANNEL); }
@Override protected List<Object> getChannelIndicatorList(Message<?> message) { Object value = message.getHeaders().get(this.headerName); if (value instanceof String && ((String) value).indexOf(',') != -1) { value = StringUtils.tokenizeToStringArray((String) value, ",", true, true); } return Collections.singletonList(value); }
public Integer getSequenceIndex(){ return (Integer)message.getHeaders().get(MessageRegistryConstants.MSG_HEADER_SEQ_IDX); }
public Object getCorrelationKey(Message<?> message) { return message.getHeaders().get(this.attributeName); }
private long determineDelayForMessage(Message<?> message) { long delay = this.defaultDelay; if (this.delayHeaderName != null) { Object headerValue = message.getHeaders().get(this.delayHeaderName); if (headerValue instanceof Date) { delay = ((Date) headerValue).getTime() - new Date().getTime(); } else if (headerValue != null) { try { delay = Long.valueOf(headerValue.toString()); } catch (NumberFormatException e) { if (logger.isDebugEnabled()) { logger.debug("Failed to parse delay from header value '" + headerValue.toString() + "', will fall back to default delay: " + this.defaultDelay); } } } } return delay; }
private Properties getStringTypedHeaders(Message<?> message) { Properties properties = new Properties(); MessageHeaders headers = message.getHeaders(); for (String key : headers.keySet()) { Object value = headers.get(key); if (value instanceof String) { properties.setProperty(key, (String) value); } } return properties; }
/** * Extracts message identifier. * @param message * @return message identifier */ public static String extractMessageId(Message<?> message) { return (message!=null&&message.getHeaders()!=null)? (String)message.getHeaders().get(MessageRegistryConstants.MSG_HEADER_ID):null; }
/** * Extracts process id. * @param message * @return process id */ protected String extractProcessId(final Message<?> message) { return ((ProcessContext) message.getHeaders().get( MessageRegistryConstants.MSG_HEADER_CTX)).getProcessId(); }
private MessageChannel resolveChannelFromHeader(Message<?> message, String headerName) { MessageChannel channel = null; Object channelHeader = message.getHeaders().get(headerName); if (channelHeader != null) { if (channelHeader instanceof MessageChannel) { channel = (MessageChannel) channelHeader; } else if (channelHeader instanceof String) { Assert.state(this.channelResolver != null, "ChannelResolver is required for resolving '" + headerName + "' by name."); channel = this.channelResolver.resolveChannelName((String) channelHeader); } else { throw new ChannelResolutionException("expected a MessageChannel or String for '" + headerName + "', but type is [" + channelHeader.getClass() + "]"); } } return channel; }
/** * Extracts process identifier. * @param message * @return process identifier */ public static String extractProcessId(Message<?> message) { return (message!=null&&message.getHeaders()!=null)? ((ProcessContext) message.getHeaders().get(MessageRegistryConstants.MSG_HEADER_CTX)).getProcessId():null; }
/** * Writes single element and notifies {@link IMessageRegistry} instance. * @param processId * @param message */ protected void writeSingle(final String processId, final Message<?> message) { try { if (message==null) { log.warn("nothing to write for process " + processId); return; } if (msgIdThreadLocal!=null) { msgIdThreadLocal.set( (String) message.getHeaders().get(MessageRegistryConstants.MSG_HEADER_ID)); } singleElementWriterNode.store(message.getPayload(), (ProcessContext) message.getHeaders().get( MessageRegistryConstants.MSG_HEADER_CTX)); messageRegistry.consume(processId, (String) message.getHeaders().get( MessageRegistryConstants.MSG_HEADER_ID)); } catch (final Exception e) { throw new MessageHandlingException(message, e); } }
private void handleAggregatedMessageException(final String processId, final AggregatedMessageAwareException ex) { final List<Message<?>> failedMessages = ex.getMessages(); final Exception cause = (Exception) ex.getCause(); logMultiMsgException(processId, failedMessages.size(), cause); try { final ErrorHandlerEntry ehe = getProcessingStatsEntry(processId).getErrorHandlerEntry(); for (final Message<?> failedMessage : failedMessages) { final String failedMsgId = (String) failedMessage.getHeaders().get(MessageRegistryConstants.MSG_HEADER_ID); try { ehe.addMessageError(failedMsgId, cause); } finally { // consume message in MR try { messageRegistry.consume(processId, failedMsgId); } catch (final MessageRegistryException e) { log.error("Problem with message consumption", e); interrupt(new ProcessRequest(processId)); return; } } } } catch (final ProcessingStatsException e) { log.error("No stats entry found for process: " + processId, e); interrupt(new ProcessRequest(processId)); return; } }