음. System.currentTimeMillis()
과 항상 거래 할 수 있기 때문에 원하는 것을 분명하지 않습니다.
그러나 다른 측면 스프링 통합에서
은
<jms:message-driven-channel-adapter>
에 메시지를 incomming의 메시지 헤더
jms_timestamp
-
JmsMessage
의
jMSTimestamp
속성을 매핑합니다.
또 다른 요점은 각 스프링 통합 메시지에 고유 한 timestamp
헤더가 있다는 것입니다. 이 같은 일에 전환하는 경우
그래서 :이 채널로 전송되기 전에
<wire-tap channel="logger"/>
<logging-channel-adapter id="logger" log-full-message="true"/>
당신은 항상, 테 로그에 각 메시지 이리저리 timestamp
을 볼 수 있습니다.
UPDATE
확인을 클릭합니다. 감사. 이제는 더 분명합니다.
음, (귀하의 경우 put
) 아웃 바운드 부분 난 당신의 솔루션을 사용자 정의 ChannelInterceptor
에 누워있다 말할 수 있습니다 ChannelInterceptor
이 아니라고
public class PutTimeInterceptor extends ChannelInterceptorAdapter {
private final Log logger = LogFactory.getLog(this.getClass());
@Override
public Message<?> preSend(Message<?> message, MessageChannel channel) {
logger.info("preSend time [" + System.currentTimeMillis() + "] for: " + message);
return message;
}
@Override
public void postSend(Message<?> message, MessageChannel channel, boolean sent) {
logger.info("postSend time [" + System.currentTimeMillis() + "] for: " + message);
}
}
<channel id="putToJmsChannel">
<interceptors>
<bean class="com.my.proj.int.PutTimeInterceptor"/>
</interceptors>
</channel>
<jms:outbound-channel-adapter channel="putToJmsChannel"/>
염두에 두십시오 statefull이므로 각 메시지에 대해 calculate
put
시간을 수동으로 입력해야합니다. 이 단지 put
위한
public class PutTimeRequestHandlerAdvice extends AbstractRequestHandlerAdvice {
private final Log logger = LogFactory.getLog(this.getClass());
@Override
protected Object doInvoke(ExecutionCallback callback, Object target, Message<?> message) throws Exception {
long before = System.currentTimeMillis();
Object result = callback.execute();
logger.info("Put time: [" + System.currentTimeMillis() - before + "] for: " + message);
return result;
}
}
:
또 다른 옵션은 사용자 정의 AbstractRequestHandlerAdvice
를 구현해야 할 때, <jms:request-handler-advice-chain>
입니다.
get
부분의 경우 execution time
은 MessageListener
이며 event-driven
구성 요소이므로 파생 될 수 없습니다. 메시지가 큐에있을 때 방금 메시지를 수신하면 그게 전부입니다. 리스너가 대기열에서 메시지 검색을 시작할 때 동점이되지 않습니다.
Artem, 세부 사항으로 내 질문을 업데이트했습니다. 제발 제안 해주세요. 당신의 제안을보고 다시 대답 할 것입니다. 감사. –
답변이 업데이트되었습니다 –
감사합니다 Artem. 나는 너의 제안을 사용하여 시간을 넣을 수있다.그리고 당신이 말했듯이, 나는 우리가 "시간을 얻을 수 없다"는 것을 이해합니다. 그러나 message-driven-channel-adapter가 메시지를 수신 한 후에 타임 스탬프를 얻는 것이 가능합니다. 이제 MQ에서 메시지를 가져온 후 호출되는 즉시 메서드에 타임 스탬프를 기록합니다. –