如何使用spring集成java DSL向rabbitmq队列发送消息
我编写了一个简单的示例,从控制台读取文本并将其发送到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() {
@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)