2016-05-26 151 views

回答

1

不確定你在這裏截取的意思 - 你給出的兩個例子都不是基於消息的:)。

但是您想要訪問完整的消息,可以將其用作參數@StreamListener@ServiceActivator -annotated方法。此外,Spring Cloud Stream允許您設置完整的Spring集成管道,因此您可以添加建議和所需的所有內容 - 請參閱此處:https://github.com/spring-projects/spring-integration-java-dsl/wiki/Spring-Integration-Java-DSL-Reference

我鼓勵大家看看Spring Integration參考資料以及http://docs.spring.io/autorepo/docs/spring-integration/4.2.6.RELEASE/reference/html/。 Spring Cloud Stream自動注入通道,從那裏您可以完全自由地構建管道。

希望這有助於 馬呂斯

+0

是的,我幾小時前開始閱讀Spring Integration,我想答案是GlobalChannelInterceptor。攔截器是一種常見的設計模式。它基本上是在你處理之前或之後得到請求或消息。 –

+1

是的,在這種情況下'@ GlobalChannelInterceptor'應該會有幫助。 –

7

之所以能夠攔截使用GlobalChannelInterceptor註釋和ChannelInterceptor接口的入站和出站春季雲流消息。見下面的示例。

import org.springframework.integration.config.GlobalChannelInterceptor; 
import org.springframework.messaging.Message; 
import org.springframework.messaging.MessageChannel; 
import org.springframework.messaging.support.ChannelInterceptor; 
import org.springframework.stereotype.Component; 

@Component 
@GlobalChannelInterceptor 
public class Interceptor implements ChannelInterceptor { 

    private final Logger log = LoggerFactory.getLogger(Interceptor.class); 

    @Override 
    public Message<?> preSend(Message<?> msg, MessageChannel mc) { 
     log.info("In preSend"); 
     return msg; 
    } 

    @Override 
    public void postSend(Message<?> msg, MessageChannel mc, boolean bln) { 
     log.info("In postSend"); 
    } 

    @Override 
    public void afterSendCompletion(Message<?> msg, MessageChannel mc, boolean bln, Exception excptn) { 
     log.info("In afterSendCompletion"); 
    } 

    @Override 
    public boolean preReceive(MessageChannel mc) { 
     log.info("In preReceive"); 
     return true; 
    } 

    @Override 
    public Message<?> postReceive(Message<?> msg, MessageChannel mc) { 
     log.info("In postReceive"); 
     return msg; 
    } 

    @Override 
    public void afterReceiveCompletion(Message<?> msg, MessageChannel mc, Exception excptn) { 
     log.info("In afterReceiveCompletion"); 
    } 

}