我有一个使用消息代理(activemq)的带有spring和websockets的webapp。
这是我的配置类:
@Configuration
@EnableWebSocketMessageBroker
@EnableScheduling
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableStompBrokerRelay("/topic","/queue/");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/hello").withSockJS();
}
}
我有一个计划任务,不断向用户名“StanTheMan”推送消息:
@Scheduled(fixedDelay = 1000)
public void sendGreetings() {
HelloMessage hello = new HelloMessage();
hello.setContent("timeStamp:" + System.currentTimeMillis());
String queueMapping = "/queue/greetings";
template.convertAndSendToUser(
"DannyD",
queueMapping,
hello);
}
目前,如果用户没有通过 websocket 连接到服务器 - 他的所有消息都没有为他排队,他们只是丢弃了。每当他连接时 -都会为他排队等待新消息。我是否可以以任何方式将消息“转换并发送到用户”给离线用户?我想将过期时间的消息排入队列,以便离线用户稍后在他们再次连接并且过期时间未结束时推送。
我怎样才能做到这一点?显然使用真正的消息代理(activemq)应该有助于实现这一目标,但是如何实现呢?
谢谢!