如何删除ActiveMQ中的非活动目的地?

时间:2018-01-29 20:01:01

标签: spring-boot activemq stomp spring-websocket

我需要配置activemq来删除非活动队列:

使用websocket配置如下

@Configuration
@EnableWebSocketMessageBroker 
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

      @Override
        public void configureMessageBroker(MessageBrokerRegistry config) {


          config.setApplicationDestinationPrefixes("/app")
            .setUserDestinationPrefix("/user")
            .enableStompBrokerRelay("/topic","/queue","/user")
            .setRelayHost("localhost")
            .setRelayPort(61613);


        }


        public void registerStompEndpoints(StompEndpointRegistry registry) {
            registry.addEndpoint("/websocket").withSockJS();
        }


}

如何在spring boot中添加以下destinationPolicy?如何导入这部分?     

  <destinationPolicy>
     <policyMap>
        <policyEntries>
           <policyEntry queue=">" gcInactiveDestinations="true" inactiveTimoutBeforeGC="30000"/>
        </policyEntries>
     </policyMap>
  </destinationPolicy>

</broker>

1 个答案:

答案 0 :(得分:1)

将此bean定义添加到您的配置

@Bean
public BrokerService broker() throws Exception {
    BrokerService broker = new BrokerService();
    broker.setSchedulePeriodForDestinationPurge(10000);
    broker.addConnector("stomp://localhost:61613");
    PolicyMap policyMap = new PolicyMap();
    PolicyEntry policyEntry = new PolicyEntry();
    policyEntry.setGcInactiveDestinations(true);
    policyEntry.setInactiveTimeoutBeforeGC(30000);
    policyEntry.setQueue(">");
    List<PolicyEntry> entries = new ArrayList<PolicyEntry>();
    entries.add(policyEntry);
    policyMap.setPolicyEntries(entries);
    broker.setDestinationPolicy(policyMap);
    return broker;
}

并验证您是否拥有这些依赖项

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-activemq</artifactId>
</dependency>

<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-stomp</artifactId>
</dependency>