Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用spring集成java DSL向rabbitmq队列发送消息_Java_Rabbitmq_Spring Integration_Spring Rabbit_Spring Integration Amqp - Fatal编程技术网

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

如何使用spring集成java DSL向rabbitmq队列发送消息,java,rabbitmq,spring-integration,spring-rabbit,spring-integration-amqp,Java,Rabbitmq,Spring Integration,Spring Rabbit,Spring Integration Amqp,我编写了一个简单的示例,从控制台读取文本并将其发送到rabbitMq服务器: @Configuration @EnableIntegration @IntegrationComponentScan public class Config { @Autowired private AmqpTemplate amqpTemplate; @Bean public IntegrationFlow fromConsoleToRabbitFlow() {

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

}
附笔。 “队列”选项卡如下所示:


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

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


请参阅。

我是否必须传递两个参数:交换名称和路由密钥?然后我需要以某种方式将交换绑定到队列?这取决于;所有队列都绑定到默认exchange,队列名称作为路由密钥。或者,您可以创建一个交换并使用与队列名称不同的路由密钥绑定队列;然后,您必须使用正确的路由密钥发送到exchange。我建议您阅读Spring AMQP参考手册,并浏览以了解更多信息。RabbitAdmin也会找到exchange和绑定bean-请参阅我答案中的链接。假设我有一个名为myQueue的队列。我是否必须写入.handle(Amqp.outboundAdapter(amqpmetplate).routingKey(“myQueue”)?我是否必须通过任何交换?如我所说;是的,这将起作用,因为
myQueue
以其名称作为路由密钥绑定到默认交换。默认情况下,框架将消息发送到默认交换。
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)