我有Spring和RabbitMQ的以下配置:
Spring Boot:1.2.7
RabbitMQ:3.5.4
我正在使用以下Spring bean来创建Stomp端点(我的配置类扩展AbstractWebSocketMessageBrokerConfigurer
):
@Bean
public TopicExchange streamingExchange(@Qualifier("admin") final RabbitAdmin rabbitAdmin) {
TopicExchange topicExchange = new TopicExchange(exchangeName, true, false);
topicExchange.setAdminsThatShouldDeclare(rabbitAdmin);
return topicExchange;
}
@Override
public void configureMessageBroker(final MessageBrokerRegistry config) {
config.enableStompBrokerRelay("/my_stream", "/test").setRelayHost(host)
.setSystemLogin(username).setSystemPasscode(password).setClientLogin(username)
.setClientPasscode(password);
}
@Override
public void registerStompEndpoints(final StompEndpointRegistry registry) {
registry.addEndpoint("/test").setAllowedOrigins("*").withSockJS();
}
现在,当客户端连接到此端点时,将创建一个临时队列,并通过队列传输响应数据。如果客户端断开连接,则会删除队列并丢失消息。
为了防止这种情况,我想创建持久队列(因为这些队列的持久设置为false,自动删除设置为true)如果没有,我想在这些队列上设置一些过期(例如1小时或某事)。从RabbitMQ documentation来看,似乎我们可以在标题中传递这些值,但是,这仅适用于3.6.0版本,因为我们有3.5.4,它不是一个选项。
我们可以通过其他方式配置吗? (另一种方法是为连接请求添加某种监听器并以编程方式配置队列参数?我不确定这是否可行,因为我不太了解spring rabbitmq stomp插件)
答案 0 :(得分:-1)
想知道您是否尝试使用rabbitmqadmin工具将队列声明为持久?
rabbitmqadmin declare queue name=your-queue durable=true
管理工具可以从这里下载https://www.rabbitmq.com/management-cli.html