Java Spring + RabbitMQ + Docker 的奇怪问题

Ole*_*kov 1 java rabbitmq docker spring-boot

我尝试使用我上面写的技术运行简单的测试项目,但遇到奇怪的异常并且找不到解决方案。我使用 Windows 7 并且 docker 在主机上工作:192.168.99.100。rabbitmq 的管理面板通过地址http://192.168.99.100:15672,运行良好。

应用特性:

spring.rabbitmq.host=192.168.99.100
spring.rabbitmq.port=15672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
jsa.rabbitmq.queue=jsa.queue
Run Code Online (Sandbox Code Playgroud)

成分:

@Component
public class Consumer {

    @RabbitListener(queues="${jsa.rabbitmq.queue}")
    public void recievedMessage(String msg) {
        System.out.println("Recieved Message: " + msg);
    }
}
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪:

2019-09-14 16:00:54.677 ERROR 4532 --- [68.99.100:15672] c.r.c.impl.ForgivingExceptionHandler     : An unexpected connection driver error occured

    java.net.SocketException: Socket Closed
        at java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.8.0_201]
        at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) ~[na:1.8.0_201]
        at java.net.SocketInputStream.read(SocketInputStream.java:171) ~[na:1.8.0_201]
        at java.net.SocketInputStream.read(SocketInputStream.java:141) ~[na:1.8.0_201]
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) ~[na:1.8.0_201]
        at java.io.BufferedInputStream.read(BufferedInputStream.java:265) ~[na:1.8.0_201]
        at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:288) ~[na:1.8.0_201]
        at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:91) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:164) ~[amqp-client-4.0.2.jar:4.0.2]
        at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:571) ~[amqp-client-4.0.2.jar:4.0.2]
        at java.lang.Thread.run(Thread.java:748) [na:1.8.0_201]
Run Code Online (Sandbox Code Playgroud)

为什么主机被部分读取,我该如何处理?

Bri*_*ian 5

默认情况下,RabbitMQ 代理侦听端口 5672,因此将您的配置更改为使用 5672 而不是管理控制台端口 15672:

spring.rabbitmq.port=5672
Run Code Online (Sandbox Code Playgroud)

如果您的 RabbitMQ 配置为仅使用 TLS,则端口可能是 5671 而不是 5672。

参考: