Frage

Ich habe einen JMS-Listener und muss die Nachricht entgegennehmen, manipulieren und sie dann mithilfe von Websocket auf eine Seite umleiten.

Nun, ich bin nur verwirrt über die Konfiguration, ich habe die WebSocketConfig konfiguriert:

@Configuration
@EnableWebSocketMessageBroker
@EnableScheduling
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
   @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/topic", "/queue");
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/ws/firstep/").withSockJS();
        registry.addEndpoint("/ws/secondep/").withSockJS();
    }

Und das sollte stimmen, dann ist meine Webseite:

var socket = new SockJS("/myapp-web/api/ws/secondep/",undefined,options);
    var stompClient = Stomp.over(socket);
    stompClient.connect({
        company : "xxx"
    }, function(frame) {
        console.log('Connected: ' + frame);

          stompClient.subscribe('/topic/register', function(message){ 
            console.log('message: ' + message);     
          });

        stompClient.subscribe('/topic/update', function(message){ 
            console.log('message: ' + message);     
        });

Und die Verbindung funktioniert.

Jetzt habe ich auf meinem JMS-Listener versucht, eine Nachricht auf diese Weise zu senden:

public class ImporterListener implements MessageListener {

    Logger logger = LoggerFactory.getLogger(ImporterListner.class);
    @SendTo("/topic/register")
    private String TestMessage() {
        return "TestMessage";
    }

    @Override
    public void onMessage(Message message) {
        logger.info("Request on message");
        if (message instanceof MapMessage) {
            MapMessage t = (MapMessage) message;
             TestMessage(); //<--- have to send the message here

Aber es funktioniert nicht.Die Fragen sind:

  1. Wie sende ich eine Nachricht?
  2. Wo muss ich den Endpunkt (secondep) angeben, wenn ich eine Nachricht sende?

Danke schön!Jede Hilfe ist willkommen!

War es hilfreich?

Lösung

Test Nachricht();//<--- muss die Nachricht hier senden

Nein, es muss nicht gesendet werden, da Sie eine Methode aus derselben Klasse verwenden, aber @SendTo macht dein ImporterListener als Stellvertreter und Advice funktioniert nur mit der Methode einer anderen Komponente.

Das sollten Sie injizieren:

@Autowired
@Qualifier("brokerMessagingTemplate")
private MessageSendingOperations brokerMessagingTemplate;

Und senden Sie eine Nachricht damit:

brokerMessagingTemplate.convertAndSend("/topic/register", "TestMessage");

Wo muss ich den Endpunkt (secondep) angeben, wenn ich eine Nachricht sende?

Es ist für die @MessageMapping("/ws/secondep") auf einer POJO-Methode zum Empfangen von Nachrichten von Clients.Es ist nicht für den sendenden Teil.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top