当前,我使用Spring Boot 1.5.8,并且想在我的websocket中使用Rabbitmq。
以下代码是我对websocket的配置
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config
.enableStompBrokerRelay("/topic", "/queue", "/exchange")
.setRelayHost("localhost")
.setRelayPort(5672)
.setClientLogin("guest")
.setClientPasscode("guest")
.setSystemHeartbeatSendInterval(5000);
}
我将以下依赖项添加到gradle配置中
compile "org.springframework.boot:spring-boot-starter-websocket"
compile("io.projectreactor:reactor-net:2.0.5.RELEASE")
compile("io.projectreactor:reactor-core:2.0.5.RELEASE")
compile("io.netty:netty-all:4.0.33.Final")
Spring boot生成以下堆栈错误
Caused by: java.lang.NoClassDefFoundError: reactor/io/codec/Codec
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.springframework.messaging.simp.stomp.StompBrokerRelayMessageHandler.startInternal(StompBrokerRelayMessageHandler.java:388)
at org.springframework.messaging.simp.broker.AbstractBrokerMessageHandler.start(AbstractBrokerMessageHandler.java:164)
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:175)
... 17 common frames omitted
Caused by: java.lang.ClassNotFoundException: reactor.io.codec.Codec
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 32 common frames omitted
我不知道我在做什么错。有什么想法吗?
我遵循http://djeison.me/2017/11/04/spring-websocket-rabbitmq/给出的想法
并且也有与Spring security 4.0.1 and Spring 4.2.0.RC1 stompBrokerRelayMessageHandler bean error with RabbitMQ
相同的问题答案 0 :(得分:0)
类似的问题已在GitHub上解决:https://github.com/zyro23/grails-spring-websocket/issues/26
答案 1 :(得分:0)
我的情况非常罕见。我会解释的。
我将IntelliJ用作Java开发的主要IDE。当在右侧面板中配置gradle插件时,我总是使用按钮刷新依赖关系。这里的奇怪情况是,当我在IntelliJ中使用bootRun运行spring boot时,它总是产生与问题相同的错误。我尝试了最后一个用来引导jar的资源。不可思议的是,解决方案。在bootRepackage之后,IntelliJ会识别新的类Reactor.io.codec.Codec。
因此,如果您使用IntelliJ作为主IDE,请尝试重新打包,然后错误可能消失了。