4

メッセージブローカー(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) を使用すると、それを達成するのに役立つはずですが、どのように?

ありがとう!

4

2 に答える 2

-1

これは、メッセージ ブローカーのデフォルトの動作です。また、ActiveMQ ブローカーをデフォルトのブローカーとして設定していないため、Spring はメモリ内ブローカーを設定しています。

必要なものを実現するには、activeMQ の詳細を Spring Websocket メッセージ ブローカーに設定/提供します。Spring はこれらの設定を提供しないため、ActiveMQ 側ですべての永続化設定を行う必要があります。.

Spring Websocket メッセージ ブローカー用に ActiveMQ をセットアップするには、stomp を有効にしてこれを使用する必要もあります。

registry.enableStompBrokerRelay("/topic").setRelayHost("hostName").setRelayPort("00000");

詳細については、http: //docs.spring.io/spring/docs/4.0.0.RELEASE/javadoc-api/org/springframework/messaging/simp/config/StompBrokerRelayRegistration.htmlをご覧ください。

于 2014-05-26T08:11:10.163 に答える