【问题标题】:Why does SpEL not work in Spring Boot and Spring Cloud Stream @SendTo为什么 SpEL 在 Spring Boot 和 Spring Cloud Stream @SendTo 中不起作用
【发布时间】:2017-01-16 08:45:00
【问题描述】:

我创建了以下代码和匹配的配置。消息的摄取效果很好,但根本不评估 SpEL,因此创建了一个以表达式作为名称的新 Exchange...

查看我的依赖版本,@SendTo 注释应该支持这种表达式...

我做错了什么?

我正在使用RabbitMQSpring Boot 1.4.3

@EnableBinding(CommandChannel.class)
public class CommandSink {

    private static final Logger LOGGER = LoggerFactory.getLogger(CommandSink.class);

    @StreamListener(CommandChannel.INPUT)
    @SendTo("!{request.messageProperties.headers['reply_to']}")
    public String processCommand(@Payload String cmd, @Header("reply_to") String replyToQueue){
        LOGGER.info("Got a {} command and I'll reply to {}", cmd, replyToQueue);
        String result = "geil: " + cmd;
        return result;
    }
}

【问题讨论】:

    标签: java spring-boot rabbitmq spring-el spring-cloud-stream


    【解决方案1】:

    我做错了什么?

    什么都没有; bean 后处理器中根本没有代码来评估 SpEL 表达式;该值是目标(通道名称)的简单字符串值。

    是什么让您相信那里支持 SpEL?我无法解析这个...

    查看我的依赖版本,@SendTo 注释应该支持这种表达式...

    【讨论】:

    • Spring Stream for RabbitMQ 基于 Spring Amqp。该文档清楚地说明了这一点:docs.spring.io/spring-amqp/reference/htmlsingle/…
    • 您将两种不同的技术混为一谈。那是在@RabbitListener 的上下文中; @StreamListener 是另一种野兽。而 SCSt 可以使用 RabbitMQ 作为传输;那只是一种选择(Kafka等)。 @StreamListener 对 RabbitMQ 一无所知。当然,您可以改用@RabbitListener;在这种情况下,您不需要逻辑来选择replyTo - 它会自动使用,@SendTo 仅用于没有replyTo 的消息。我并不是说@StreamListener 不能做类似的事情,但由于其他传输,它会更复杂。
    • 啊,我明白了。但是我必须自己管理队列等的创建......我猜我只会“手动”发送响应。谢谢!
    猜你喜欢
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 2020-03-08
    相关资源
    最近更新 更多