У меня есть следующие конфигурации для Spring и RabbitMQ:Прочные очереди с использованием Spring RabbitMQ Stomp
Spring загрузки: 1.2.7
RabbitMQ: 3.5.4
Я использую после Spring beans для создания конечной точки Stomp (My config class extends 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 и auto-delete установлены в true), если нет, я хочу, чтобы в этих очередях было определенное количество истечений (например, 1 час или что нибудь). Из RabbitMQ documentation, похоже, мы можем передавать эти значения в заголовках, однако это применимо только для версий 3.6.0, так как у нас есть 3.5.4, это не вариант.
Есть ли другой способ, с помощью которого мы можем это настроить? (Другой подход заключается в том, чтобы добавить какой-то прослушиватель для запроса на соединение и настроить параметры очереди программным образом? Я не уверен, насколько это возможно, поскольку я мало знаю о плагине весеннего кролика-монтирования)