当前位置: 首页 > 知识库问答 >
问题:

Wildfly 10上带有ActiveMQ Artemis的Websockets/STOMP不工作

单于骁
2023-03-14
<acceptor name="stomp-acceptor"
    factory-class="org.apache.activemq.artemis.core.remoting.impl.netty.NettyAcceptorFactory">
    <param name="protocols" value="STOMP" />
    <param name="port" value="61613" />
</acceptor>

使用add-user.bat向application-users.properties添加一个新的应用程序用户guest/guest

添加以下StompConfiguration(缩写):

@Configuration
@EnableWebSocketMessageBroker
public class StompConfiguration extends AbstractWebSocketMessageBrokerConfigurer {
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/ws").setAllowedOrigins("*").withSockJS();
    }

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.setApplicationDestinationPrefixes("/app");
            config.enableStompBrokerRelay("/topic", "/queue").setRelayHost("localhost").setRelayPort(61613)
            .setClientLogin("guest").setClientPasscode("guest");
        }
    }

这在启动时似乎很有效:

template.convertAndSend(topic, payload);

错误[org.springframework.messaging.simp.stomp.stompbrokerrelaymessagehandler](reactor-tcp-io-1)收到错误{message=[amq339001:目的地不存在:/topic/abc/12345/xyz]}session=system

使用Stomp,不应该事先创建一个主题。我怎样才能告诉阿尔忒弥斯自动创建它?

共有1个答案

高祺
2023-03-14

在我的例子中,有两个问题导致了此错误消息

1)第一个问题是主题的名称不是以“jms.topic”开头的,但Artemis似乎期望这样(无论出于什么原因...)。

通过将代码更改为

template.convertAndSend("jms.topic." + topic, payload);
 config.enableStompBrokerRelay("jms.topic")
 类似资料:
  • 我有一个带sokjs套接字的节点应用程序。 一些HTML/JS客户端使用stomp over sock JS,但我不明白订阅是如何工作的: 客户端已连接,事件已记录,但范围为$scope。从不打电话通知。如何配置主题订阅? 编辑: 请注意,我一定清楚。 我使用sockjs模块作为websocket服务器。 没有太多的配置:

  • 我正在使用Spring Boot。我想将JAX RS作为我的基本REST-API与WebSockets结合使用(使用Stomp)。然而,这两个图书馆似乎最终陷入了冲突。 我有以下WebSocketConfig: 以及以下AppConfig: 如果两个类都在。如果我注释掉AppConfig,我的套接字连接将没有任何问题。在其他情况下,我的REST-Api可以工作,但是无法建立web socket-C

  • 根据Spring网站上的这个教程,我知道了如何使用Stomp和Spring4建立一个基于WebSocket的应用程序。在客户端,我们有: 在服务器端,控制器中有以下内容: 现在,我明白了确保如果消息发送到目标,那么将调用方法。由于订阅了,将消息发送回。 那么,有什么方法可以用Spring4、SockJS和没有跺脚的情况下做到这一点呢?还是Spring4WebSocket只支持stomp?

  • 给定websocket配置: 和客户端JavaScript: 并从服务器发送此消息: 回调不会被激发。 javascript控制台显示已建立连接: 已连接到STOMP:已连接用户名:jschmoe心跳:0,0版本:1.1订阅ID:sub-0目标:/user/topic/abc 并且tomcat控制台显示: 正在处理订阅目的地=/topic/abc-useryl3ovhr2订阅ID=sub-0会话=

  • 问题内容: 有没有一种方法可以将WebSocket与SockJS客户端和Spring 4服务器一起使用,而不能与STOMP一起使用? 基于Spring网站上的本教程,我知道如何使用Stomp和Spring 4设置基于WebSocket的应用程序。在客户端,我们有: 在服务器端,控制器中包含以下内容: 现在,我了解可以确保如果将消息发送到目的地,则将调用该方法。并且由于已订阅,因此会将邮件发送回。

  • 我们正在将SpringWebSockets集成到我们的应用程序中,我运行了HelloWorld示例,令人惊讶的是,spring为我们连接了一切,以便将服务器端通知推送到客户端。 不过,我有一些简单的问题 1) 队列是如何创建的?我使用的是ActiveMQ,队列名称与我在目的地中指定的不同(例如,像greetings-user3n9\u jn3i)。 2)目标名称是否不同于队列? 3) 我正在使用A