Comment utiliser exécutorsubscribablechannel
-
21-12-2019 - |
Question
liée à la question AutoWire SimpMessagingTemplate
J'ai un problème de la classe exécutéSubscurscribablechannel.Je souhaite que le serveur envoie un message asynchrone au navigateur. Comment puis-je utiliser correctement exécutorsubscribablechannel ?
Exemple:
public class GreetingController {
@Autowired
private SimpMessagingTemplate template;
public void setTemplate(SimpMessagingTemplate template) {
this.template = template;
}
@MessageMapping("/hello")
@SendTo("/topic/greetings")
public Greeting greeting(HelloMessage message) throws Exception {
Thread.sleep(5000); // simulated delay
this.template.convertAndSend("/topic/greetings", "Hello World");
return new Greeting("Hello, " + message.getName() + "!");
}
}
mais le texte "Hello World" que j'envoie dans la ligne
this.template.convertAndSend("/topic/greetings", "Hello World");
n'est pas reçu par le navigateur.Tout le reste fonctionne bien.
La configuration des haricots est la suivante:
<bean id="executorSC" class="org.springframework.messaging.support.ExecutorSubscribableChannel"/>
<bean id="template" class="org.springframework.messaging.simp.SimpMessagingTemplate">
<constructor-arg index="0" ref="executorSC"/>
</bean>
Merci d'avance.
La solution
Cette question a été écrite en raison d'un bogue dans Intellij Idea.La réponse est dans Impossible d'AUTOWIRE.Aucun haricot de type SimPMesSagagageTemplate de type trouvé
a billet a été créé dans Jetbrains pour résoudre ce problème.
Autres conseils
Essayez d'utiliser cette configuration
<websocket:message-broker
application-destination-prefix="/app">
<websocket:stomp-endpoint path="/ws">
<websocket:sockjs />
</websocket:stomp-endpoint>
<websocket:simple-broker prefix="/topic/greetings" />
</websocket:message-broker>
au lieu de
<bean id="executorSC" class="org.springframework.messaging.support.ExecutorSubscribableChannel"/>