代码之家  ›  专栏  ›  技术社区  ›  Jose Martinez

如何拦截Spring Cloud Stream消息?

  •  5
  • Jose Martinez  · 技术社区  · 8 年前

    Spring允许截取其许多产品的消息,如RestTemplate和SpringMVC。是否可以拦截Spring Cloud Stream消息?用于传入和传出消息。

    2 回复  |  直到 8 年前
        1
  •  12
  •   Jose Martinez    8 年前

    能够使用 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");
        }
    
    }
    
        2
  •  1
  •   Marius Bogoevici    8 年前

    不确定这里的拦截是什么意思——您给出的两个示例都不是基于消息的:)。

    但如果要访问完整消息,可以将其用作 @StreamListener @ServiceActivator -带注释的方法。此外,Spring Cloud Stream允许您建立完整的Spring Integration管道,因此您可以添加建议和所需的所有内容-请参阅此处: 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自动注入通道,从那里您可以完全自由地构建管道。

    希望这能有所帮助, 马吕斯