我正在尝试使用RabbitMQ配置一个简单的Spring Cloud Stream应用程序。我使用的代码主要取自spring-cloud-stream-samples。 我有一个切入点:
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
和示例中的简单消息生成器:
@EnableBinding(Source.class)
public class SourceModuleDefinition {
private String format = "yyyy-MM-dd HH:mm:ss";
@Bean
@InboundChannelAdapter(value = Source.OUTPUT, poller = @Poller(fixedDelay = "${fixedDelay}", maxMessagesPerPoll = "1"))
public MessageSource<String> timerMessageSource() {
return () -> new GenericMessage<>(new SimpleDateFormat(this.format).format(new Date()));
}
}
此外,这是application.yml配置:
fixedDelay: 5000
spring:
cloud:
stream:
bindings:
output:
destination: test
当我运行示例时,它连接到Rabbit并创建一个名为test的交换。但我的问题是,它不会自动创建队列和绑定。我可以看到兔子的流量,但我的所有消息都消失了。虽然我需要他们留在一些队列,除非他们被消费者阅读。
也许我误解了一些东西,但从我读过的所有主题来看,Spring Cloud Stream似乎应该自动创建队列和绑定。如果没有,我如何配置它以保持我的消息?
我正在使用Spring Cloud Brixton.SR5和Spring Boot 1.4.0.RELEASE。
答案 0 :(得分:3)
启动消费者应用程序后,将立即创建一个队列。
对于Rabbit MQ,我们为每个使用者群组设置了单独的队列,并且我们事先无法知道所有组,如果您希望为事先已知的使用者组自动创建队列,则可以使用{ {1}}生产者的财产。这将确保消息持续存在,直到启动该组的使用者。
答案 1 :(得分:0)
您需要消费者才能创建队列。
在这里,您可以找到使用rabbitMq的生产者和消费者的示例: