メッセージブローカー(activemq)を使用して、春とウェブソケットを備えたウェブアプリを持っています。
ここに私の設定クラスがあります:
@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 経由でサーバーに接続されていない場合、そのユーザーへのすべてのメッセージはキューに入れられず、単純に破棄されます。彼が接続するたびに、新しいメッセージがキューに入れられます。何らかの方法でメッセージをオフライン ユーザーに「convertAndSendToUser」することはできますか? オフライン ユーザーが再度接続し、有効期限が切れていないときに後でプッシュできるように、有効期限が切れたメッセージをキューに入れたいと考えています。
どうすればそれを達成できますか? 明らかに、実際のメッセージブローカー (activemq) を使用すると、それを達成するのに役立つはずですが、どのように?
ありがとう!