【发布时间】:2016-05-18 07:19:28
【问题描述】:
我对 Spring 和 RabbitMQ 有以下配置:
春季启动: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 插件了解不多)
【问题讨论】:
标签: java spring websocket rabbitmq stomp