Удаление старых сообщений из тем ActiveMQ с помощью WebSocket и Spring - PullRequest
0 голосов
/ 11 июня 2018

Я встроил брокер ActiveMQ, настроенный в Spring с поддержкой веб-сокетов (используя STOMP).

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketMqConfig extends AbstractWebSocketMessageBrokerConfigurer {

@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
    registry.enableStompBrokerRelay("/topic");
}

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry.addEndpoint("/messaging")
            .setAllowedOrigins("*")
            .withSockJS();
}

@Bean(initMethod = "start", destroyMethod = "stop")
public BrokerService brokerService() throws Exception {
    PersistenceAdapter persistenceAdapter = getPersistenceAdapter();
    BrokerService brokerService = new BrokerService();
    brokerService.setPersistent(true);
    brokerService.setDeleteAllMessagesOnStartup(true);
    brokerService.setUseJmx(false);
    brokerService.setBrokerName("broker");
    brokerService.addConnector("stomp://localhost:61613");
    return borkerService;
}

В моем клиенте JavaScript я подписываюсь на тему:

    var successHandler = function() {
        stompClient.subscribe('/topic/test', function(not) {
            pushNotification(not);
        }, {'id': clientId, 'activemq.subscriptionName': clientId});
    };

    var socket = new SockJS('/messaging');
    var stompClient = Stomp.over(socket);
    stompClient.connect({'client-id': clientId}, successHandler, failureHandler);

И я используюбэкэнд-сервис для подачи этой темы:

@Autowired
private SimpMessagingTemplate messagingTemplate;

messagingTemplate.convertAndSend("/topic/test", event);

И вот мои вопросы:

  1. Когда я отправляю сообщение в тему, но клиент еще не подписан, почему сообщенияне сохраняется (я полагаю, что после подписки клиента он должен быть уведомлен о пропущенных сообщениях)?
  2. Если клиент отключается от темы, каждое сообщение сохраняется, существует ли какое-либо средство для ограничения количества сохраняемых сообщений, времени или размерафайлов журнала KahaDB?

1 Ответ

0 голосов
/ 11 июня 2018

Сообщения, отправляемые в тему, не сохраняются, если клиент ранее не создал подписку на тему длительного пользования ранее и сообщение отправлено с установленным постоянным флагом.Чтобы создать долговременную подписку, добавьте заголовки, как указано в документации ActiveMQ STOMP .

Как только вы начнете использовать долговременные подписки на темы, тогда в хранилище KahaDB может накапливаться сообщение yes, и в этот момент вы можете настроить ограничивает использование магазина для контроля размера.

...