0

我正在尝试将 RabbitMQ Web STOMP 插件与 Spring 启动一起使用。我已经启动了 RabbitMQ 服务器,并为 http/web-stomp 协议公开了 15674 端口。当我运行 Spring Boot 项目时,出现以下错误

osmssStompBrokerRelayMessageHandler:会话系统中的 TCP 连接失败:传输失败:java.lang.IllegalArgumentException:没有枚举常量 org.springframework.messaging.simp.stomp.StompCommand.HTTP/1.1 400 错误请求

io.netty.handler.codec.DecoderException: java.lang.IllegalArgumentException: 没有枚举常量 org.springframework.messaging.simp.stomp.StompCommand.HTTP/1.1 400 错误请求

下面是我的 pom.xml 依赖项

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>io.projectreactor</groupId>
        <artifactId>reactor-core</artifactId>
        <version>3.2.2.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>io.projectreactor.netty</groupId>
        <artifactId>reactor-netty</artifactId>
        <version>0.8.2.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-all</artifactId>
        <version>4.0.33.Final</version>
    </dependency>
</dependencies>

我使用下面的类作为网络套接字配置

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration implements 
WebSocketMessageBrokerConfigurer {

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

   @Override
   public void registerStompEndpoints(StompEndpointRegistry registry) {
       registry.addEndpoint("/websocket").withSockJS();

   }
}

下面是我的 RabbitMQ Web 插件的快照,它显示了暴露的端口

在此处输入图像描述

有人能帮忙吗?

4

2 回答 2

2

你的端口relay是错误的。在该屏幕截图上查看您的插件配置。STOMP 端口是61613. 而这个完全是默认的一个StompBrokerRelayRegistration

public class StompBrokerRelayRegistration extends AbstractBrokerRegistration {

    private String relayHost = "127.0.0.1";

    private int relayPort = 61613;

    private String clientLogin = "guest";

    private String clientPasscode = "guest";

    private String systemLogin = "guest";

    private String systemPasscode = "guest";

不知道为什么你决定http/web-stomp为你的应用程序使用那个插件:https ://www.rabbitmq.com/web-stomp.html

我们在这里谈论的是 STOMP 经纪人。我们的 Spring 应用程序将成为该应用程序的 WebSocket 代理。Web STOMP RabbitMQ 插件适用于目标 WebSocket 客户端。这不适用于服务器端通过 STOMP 代理进行中继。

于 2018-11-30T16:06:21.653 回答
0

只需使用为 STOMP 插件公开的端口即可。一切都应该正常工作。您也可以在 pom.xml 中添加这些依赖项

<!-- RabbitMQ Starter Dependency -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

<!-- Following additional dependency is required for Full Featured STOMP Broker Relay -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-reactor-netty</artifactId>
</dependency>
于 2019-09-17T13:03:31.003 回答