0

我编写了简单的示例来从控制台读取文本并将其发送到 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();
    }

}

它看起来几乎是可行的解决方案,但我my_spring_integration_queue在 rabbitmq 管理控制台中找不到:

在此处输入图像描述

但我在其他选项卡上找不到与“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)

附言

队列选项卡如下所示:

在此处输入图像描述

4

1 回答 1

1

您要么需要手动添加队列,要么使用 aRabbitAdmin @Bean自动为您声明它 - 管理员将找到所有类型的 beanQueue并声明它们。

如果您使用的是 Spring Boot,它会自动为您配置一个管理 bean,因此您只需要Queue @Bean.

请参阅配置代理

于 2019-08-27T12:39:58.933 回答