blog-comments icon indicating copy to clipboard operation
blog-comments copied to clipboard

springboot(八):RabbitMQ详解 - 纯洁的微笑博客

Open ityouknow opened this issue 6 years ago • 31 comments

http://www.ityouknow.com/springboot/2016/11/30/spring-boot-rabbitMQ.html

RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。

ityouknow avatar Jun 09 '18 01:06 ityouknow

赞!

yeasheng avatar Jun 14 '18 12:06 yeasheng

一对多发送出现了消息丢失现象,老铁能否剖析一下~ Receiver1 : hello 0 2018-08-05 18:25:28 Receiver2 : hello 1 2018-08-05 18:25:28 Receiver1 : hello 4 2018-08-05 18:25:29 Receiver2 : hello 5 2018-08-05 18:25:29 Receiver1 : hello 8 2018-08-05 18:25:30 Receiver2 : hello 9 2018-08-05 18:25:30 Receiver1 : hello 12 2018-08-05 18:25:30 Receiver2 : hello 13 2018-08-05 18:25:31 Receiver1 : hello 16 2018-08-05 18:25:31 Receiver2 : hello 17 2018-08-05 18:25:31 Receiver1 : hello 20 2018-08-05 18:25:32 Receiver2 : hello 21 2018-08-05 18:25:32 Receiver1 : hello 24 2018-08-05 18:25:33 Receiver2 : hello 25 2018-08-05 18:25:33 Receiver1 : hello 28 2018-08-05 18:25:34 Receiver2 : hello 29 2018-08-05 18:25:34 Receiver1 : hello 32 2018-08-05 18:25:35 Receiver2 : hello 33 2018-08-05 18:25:35 Receiver1 : hello 36 2018-08-05 18:25:35 Receiver2 : hello 37 2018-08-05 18:25:36 Receiver1 : hello 40 2018-08-05 18:25:36 Receiver2 : hello 41 2018-08-05 18:25:36 Receiver1 : hello 44 2018-08-05 18:25:37 Receiver2 : hello 45 2018-08-05 18:25:37 Receiver1 : hello 48 2018-08-05 18:25:38 Receiver2 : hello 49 2018-08-05 18:25:38 Receiver1 : hello 52 2018-08-05 18:25:39 Receiver2 : hello 53 2018-08-05 18:25:39 Receiver1 : hello 56 2018-08-05 18:25:39 Receiver2 : hello 57 2018-08-05 18:25:40 Receiver1 : hello 60 2018-08-05 18:25:40 Receiver2 : hello 61 2018-08-05 18:25:40 Receiver1 : hello 64 2018-08-05 18:25:41 Receiver2 : hello 65 2018-08-05 18:25:41 Receiver1 : hello 68 2018-08-05 18:25:42 Receiver2 : hello 69 2018-08-05 18:25:42 Receiver1 : hello 72 2018-08-05 18:25:43 Receiver2 : hello 73 2018-08-05 18:25:43 Receiver1 : hello 76 2018-08-05 18:25:44 Receiver2 : hello 77 2018-08-05 18:25:44 Receiver1 : hello 80 2018-08-05 18:25:44 Receiver2 : hello 81 2018-08-05 18:25:45 Receiver1 : hello 84 2018-08-05 18:25:45 Receiver2 : hello 85 2018-08-05 18:25:45 Receiver1 : hello 88 2018-08-05 18:25:46 Receiver2 : hello 89 2018-08-05 18:25:46 Receiver1 : hello 92 2018-08-05 18:25:47 Receiver2 : hello 93 2018-08-05 18:25:47 Receiver1 : hello 96 2018-08-05 18:25:48 Receiver2 : hello 97 2018-08-05 18:25:48

zpcandzhj avatar Aug 05 '18 10:08 zpcandzhj

多谢大神的分享

AlyssaChia2017 avatar Aug 17 '18 06:08 AlyssaChia2017

HelloSender类少了给@Component注解

WuXianquan avatar Sep 05 '18 09:09 WuXianquan

接收者少了注解么?小白不懂,感谢大神的分享

Jasonwang1117 avatar Sep 13 '18 06:09 Jasonwang1117

膜拜大神

chenIU avatar Oct 31 '18 09:10 chenIU

get it

httpsession avatar Dec 02 '18 06:12 httpsession

@WuXianquan HelloSender类少了给@Component注解

真的是,大赞

mengxiangqipa avatar Dec 05 '18 07:12 mengxiangqipa

fanout模式下,不用这些绑定也可以发送,我看作者都配置了,但是逻辑上我没有想明白

Binding bindingExchangeA(Queue AMessage,FanoutExchange fanoutExchange) {
        return BindingBuilder.bind(AMessage).to(fanoutExchange);
    }

Lidingxiang avatar Dec 05 '18 09:12 Lidingxiang

请问一下:文章中的简单使用demo写完之后,运行抛了这个异常:org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused: connect,请问知道是什么原因吗?

CHENBIN-SKR avatar Dec 24 '18 10:12 CHENBIN-SKR

提个建议哈,文章末尾最好加一个前一篇后一篇的翻页,不然每次看完想看下一篇还要回到上一页,然后自己往下翻,然后再打开,好麻烦

ghost avatar Dec 28 '18 07:12 ghost

@Siwanper

@CHENBIN-SKR 请问一下:文章中的简单使用demo写完之后,运行抛了这个异常:org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused: connect,请问知道是什么原因吗?

连接被拒,是没有安装RabbitMQ吗?

xuwei1995 avatar Feb 19 '19 05:02 xuwei1995

@Lidingxiang fanout模式下,不用这些绑定也可以发送,我看作者都配置了,但是逻辑上我没有想明白

Binding bindingExchangeA(Queue AMessage,FanoutExchange fanoutExchange) {
        return BindingBuilder.bind(AMessage).to(fanoutExchange);
    }

@zpcandzhj 一对多发送出现了消息丢失现象,老铁能否剖析一下~ Receiver1 : hello 0 2018-08-05 18:25:28 Receiver2 : hello 1 2018-08-05 18:25:28 Receiver1 : hello 4 2018-08-05 18:25:29 Receiver2 : hello 5 2018-08-05 18:25:29 Receiver1 : hello 8 2018-08-05 18:25:30 Receiver2 : hello 9 2018-08-05 18:25:30 Receiver1 : hello 12 2018-08-05 18:25:30 Receiver2 : hello 13 2018-08-05 18:25:31 Receiver1 : hello 16 2018-08-05 18:25:31 Receiver2 : hello 17 2018-08-05 18:25:31 Receiver1 : hello 20 2018-08-05 18:25:32 Receiver2 : hello 21 2018-08-05 18:25:32 Receiver1 : hello 24 2018-08-05 18:25:33 Receiver2 : hello 25 2018-08-05 18:25:33 Receiver1 : hello 28 2018-08-05 18:25:34 Receiver2 : hello 29 2018-08-05 18:25:34 Receiver1 : hello 32 2018-08-05 18:25:35 Receiver2 : hello 33 2018-08-05 18:25:35 Receiver1 : hello 36 2018-08-05 18:25:35 Receiver2 : hello 37 2018-08-05 18:25:36 Receiver1 : hello 40 2018-08-05 18:25:36 Receiver2 : hello 41 2018-08-05 18:25:36 Receiver1 : hello 44 2018-08-05 18:25:37 Receiver2 : hello 45 2018-08-05 18:25:37 Receiver1 : hello 48 2018-08-05 18:25:38 Receiver2 : hello 49 2018-08-05 18:25:38 Receiver1 : hello 52 2018-08-05 18:25:39 Receiver2 : hello 53 2018-08-05 18:25:39 Receiver1 : hello 56 2018-08-05 18:25:39 Receiver2 : hello 57 2018-08-05 18:25:40 Receiver1 : hello 60 2018-08-05 18:25:40 Receiver2 : hello 61 2018-08-05 18:25:40 Receiver1 : hello 64 2018-08-05 18:25:41 Receiver2 : hello 65 2018-08-05 18:25:41 Receiver1 : hello 68 2018-08-05 18:25:42 Receiver2 : hello 69 2018-08-05 18:25:42 Receiver1 : hello 72 2018-08-05 18:25:43 Receiver2 : hello 73 2018-08-05 18:25:43 Receiver1 : hello 76 2018-08-05 18:25:44 Receiver2 : hello 77 2018-08-05 18:25:44 Receiver1 : hello 80 2018-08-05 18:25:44 Receiver2 : hello 81 2018-08-05 18:25:45 Receiver1 : hello 84 2018-08-05 18:25:45 Receiver2 : hello 85 2018-08-05 18:25:45 Receiver1 : hello 88 2018-08-05 18:25:46 Receiver2 : hello 89 2018-08-05 18:25:46 Receiver1 : hello 92 2018-08-05 18:25:47 Receiver2 : hello 93 2018-08-05 18:25:47 Receiver1 : hello 96 2018-08-05 18:25:48 Receiver2 : hello 97 2018-08-05 18:25:48

是junit测试吧, 可能还没来得及消费就跑完了, 但是消息还在

w100156 avatar Feb 28 '19 11:02 w100156

@Lidingxiang fanout模式下,不用这些绑定也可以发送,我看作者都配置了,但是逻辑上我没有想明白

Binding bindingExchangeA(Queue AMessage,FanoutExchange fanoutExchange) {
        return BindingBuilder.bind(AMessage).to(fanoutExchange);
    }

弟弟看了下, 应该是, 跑了第一遍, Exchanges 已经和 Routing key绑定了, 可以再 rabbit 后台看到; 然后注释掉你所说的代码, 也是可能正常发送 和 接收, 但是到后台 把 Exchanges 删除, 或把 Exchanges 和 Routing key 解绑, 只能发送, 接收不到

w100156 avatar Feb 28 '19 12:02 w100156

好像这些rabbitconfig类都没有什么作用,是我还缺少什么配置吗

dulinzhi avatar Apr 28 '19 14:04 dulinzhi

我的报了这个异常 Failed to load ApplicationContext,不知道是什么原因

Failed to bind properties under 'spring.rabbitmq' to org.springframework.boot.autoconfigure.amqp.RabbitProperties:

    Property: spring.rabbitmq.addresses
    Value: http://127.0.0.1:15672
    Origin: class path resource [application.properties]:3:27
    Reason: For input string: ""

Action:

Update your application's configuration

2019-05-01 19:15:41.759 ERROR 17848 --- [           main] o.s.test.context.TestContextManager      : Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@31d7b7bf] to prepare test instance [com.example.OrderMqApplicationTests@411341bd]

java.lang.IllegalStateException: Failed to load ApplicationContext

GeorgeGuoo avatar May 01 '19 11:05 GeorgeGuoo

传输对象类型数据,该类需要实现Serializable,rabbitmq才能够正常传输。

buildupchao avatar Jun 02 '19 10:06 buildupchao

支持一个,写的真好。由浅入深,容易理解

aloneDesperado avatar Jun 14 '19 08:06 aloneDesperado

@Siwanper

@CHENBIN-SKR 请问一下:文章中的简单使用demo写完之后,运行抛了这个异常:org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused: connect,请问知道是什么原因吗?

连接被拒,是没有安装RabbitMQ吗?

我踩的坑-----本地的erlang和rabbitMQ版本有冲突;

yangm0910 avatar Jun 17 '19 09:06 yangm0910

java.net.SocketException: Socket Closed at java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.8.0_191] at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) ~[na:1.8.0_191] at java.net.SocketInputStream.read(SocketInputStream.java:171) ~[na:1.8.0_191] at java.net.SocketInputStream.read(SocketInputStream.java:141) ~[na:1.8.0_191] at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) ~[na:1.8.0_191] at java.io.BufferedInputStream.read(BufferedInputStream.java:265) ~[na:1.8.0_191] at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:288) ~[na:1.8.0_191] at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:91) ~[amqp-client-5.4.3.jar:5.4.3] at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:164) ~[amqp-client-5.4.3.jar:5.4.3] at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:596) ~[amqp-client-5.4.3.jar:5.4.3] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_1 用户的权限已经赋了,还是报这个问题

aloneDesperado avatar Jun 18 '19 07:06 aloneDesperado

作者写的很好,在这里分享一个自己遇到的坑。浏览器默认访问端口是15672,而java链接访问的端口其实是5672,这个大家遇到链接不同问题的时候可以把端口换一下。

1942309883 avatar Jul 11 '19 01:07 1942309883

@chenIU 膜拜大神

膜拜大神 (试试@ )

lyer02 avatar Jul 14 '19 06:07 lyer02

一个发送者,发送了 10条,两个接收者,接收,总共接受的消息,没有10条,这是怎么回事?

Veng0923 avatar Jul 17 '19 07:07 Veng0923

qq1012405911 avatar Jul 24 '19 06:07 qq1012405911

Work模式的“能者多劳”,请问这个应该怎么实现呢

huagenlike avatar Jul 29 '19 07:07 huagenlike

今天试了下rabbitMq传递对象,好像不能直接传递,要序列化

sweetieblake avatar Aug 14 '19 03:08 sweetieblake

@aloneDesperado java.net.SocketException: Socket Closed at java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.8.0_191] at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) ~[na:1.8.0_191] at java.net.SocketInputStream.read(SocketInputStream.java:171) ~[na:1.8.0_191] at java.net.SocketInputStream.read(SocketInputStream.java:141) ~[na:1.8.0_191] at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) ~[na:1.8.0_191] at java.io.BufferedInputStream.read(BufferedInputStream.java:265) ~[na:1.8.0_191] at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:288) ~[na:1.8.0_191] at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:91) ~[amqp-client-5.4.3.jar:5.4.3] at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:164) ~[amqp-client-5.4.3.jar:5.4.3] at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:596) ~[amqp-client-5.4.3.jar:5.4.3] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_1 用户的权限已经赋了,还是报这个问题

@aloneDesperado java.net.SocketException: Socket Closed at java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.8.0_191] at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) ~[na:1.8.0_191] at java.net.SocketInputStream.read(SocketInputStream.java:171) ~[na:1.8.0_191] at java.net.SocketInputStream.read(SocketInputStream.java:141) ~[na:1.8.0_191] at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) ~[na:1.8.0_191] at java.io.BufferedInputStream.read(BufferedInputStream.java:265) ~[na:1.8.0_191] at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:288) ~[na:1.8.0_191] at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:91) ~[amqp-client-5.4.3.jar:5.4.3] at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:164) ~[amqp-client-5.4.3.jar:5.4.3] at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:596) ~[amqp-client-5.4.3.jar:5.4.3] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_1 用户的权限已经赋了,还是报这个问题

将端口改为5672试试

Xuwudong avatar Sep 23 '19 06:09 Xuwudong

经过发现 Queue 名称不能使用大写,否则将出现一个 Listener method 'no match' threw exception 的异常。

daxuan90 avatar Dec 13 '19 02:12 daxuan90

生产者到交换机需要路由键,交换机到队列需要绑定键吧?

499704069 avatar Mar 11 '20 03:03 499704069

楼主 为什么我传其他对象就报错 传user对象就对了

943228425 avatar Oct 09 '20 09:10 943228425