如何使用 spring 集成 java DSL 将消息发送到 rabbitmq 队列

How to send message to the rabbitmq queue using spring integration java DSL

我写了一个简单的示例来从控制台读取文本并将其发送到 rabbitMq 服务器:

@Configuration
@EnableIntegration
@IntegrationComponentScan
public class Config {

    @Autowired
    private AmqpTemplate amqpTemplate;

    @Bean
    public IntegrationFlow fromConsoleToRabbitFlow() {
        return IntegrationFlows.from(consoleSource(), c -> c.id("consoleInput")
                .poller(Pollers.fixedRate(1000))
                .autoStartup(true)
        ).channel("consoleOutputChannel")
                .handle(Amqp.outboundAdapter(amqpTemplate).routingKey("my_spring_integration_queue"))
                .get();
    }

    public MessageSource<String> consoleSource() {
        return CharacterStreamReadingMessageSource.stdin();
    }

}

看起来几乎可以工作的解决方案,但我在 rabbitmq 管理控制台中找不到 my_spring_integration_queue

但我在其他选项卡上找不到与 'my_spring_integration_queue' 相关的任何内容。我在哪里可以找到它?

我希望应用程序在队列不存在时创建它。我找不到发送到队列的方法,所以我使用了 .routingKey 方法。我也尝试了 .exchangeName 方法,但它导致了:

32019-08-27 13:26:15.972 ERROR 16372 --- [ 127.0.0.1:5672] o.s.a.r.c.CachingConnectionFactory       : Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no exchange 'my_spring_integration_queue' in vhost '/', class-id=60, method-id=40)

P.S.

“队列”选项卡如下所示:

您需要手动添加队列或使用 RabbitAdmin @Bean 自动为您声明它 - 管理员会找到所有 Queue 类型的 beans 并声明它们。

如果您使用 Spring 引导,它会自动为您配置管理 bean,因此您只需要 Queue @Bean.

Configuring the Broker