我对 Spring 和 RabbitMQ 有以下配置:
弹簧启动 : 1.2.7
兔子MQ : 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 文档中,我们似乎可以在标头中传递这些值,但是,这仅适用于 3.6.0 及更高版本,因为我们有 3.5.4,所以这不是一个选项。
还有其他方法可以配置它吗?(另一种方法是为连接请求添加某种侦听器并以编程方式配置队列参数?我不确定这是否可行,因为我对春季兔子mq stomp 插件了解不多(
想知道您是否尝试使用rabbitmqadmin工具将队列声明为持久?
rabbitmqadmin declare queue name=your-queue durable=true
可以从这里下载管理工具 https://www.rabbitmq.com/management-cli.html