如何使用 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
.
我写了一个简单的示例来从控制台读取文本并将其发送到 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
.