blog-comments
blog-comments copied to clipboard
springboot(八):RabbitMQ详解 - 纯洁的微笑博客
http://www.ityouknow.com/springboot/2016/11/30/spring-boot-rabbitMQ.html
RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。
赞!
一对多发送出现了消息丢失现象,老铁能否剖析一下~ 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
多谢大神的分享
HelloSender类少了给@Component注解
接收者少了注解么?小白不懂,感谢大神的分享
膜拜大神
get it
@WuXianquan HelloSender类少了给@Component注解
真的是,大赞
fanout模式下,不用这些绑定也可以发送,我看作者都配置了,但是逻辑上我没有想明白
Binding bindingExchangeA(Queue AMessage,FanoutExchange fanoutExchange) {
return BindingBuilder.bind(AMessage).to(fanoutExchange);
}
请问一下:文章中的简单使用demo写完之后,运行抛了这个异常:org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused: connect,请问知道是什么原因吗?
提个建议哈,文章末尾最好加一个前一篇后一篇的翻页,不然每次看完想看下一篇还要回到上一页,然后自己往下翻,然后再打开,好麻烦
@Siwanper
@CHENBIN-SKR 请问一下:文章中的简单使用demo写完之后,运行抛了这个异常:org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused: connect,请问知道是什么原因吗?
连接被拒,是没有安装RabbitMQ吗?
@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测试吧, 可能还没来得及消费就跑完了, 但是消息还在
@Lidingxiang fanout模式下,不用这些绑定也可以发送,我看作者都配置了,但是逻辑上我没有想明白
Binding bindingExchangeA(Queue AMessage,FanoutExchange fanoutExchange) { return BindingBuilder.bind(AMessage).to(fanoutExchange); }
弟弟看了下, 应该是, 跑了第一遍, Exchanges 已经和 Routing key绑定了, 可以再 rabbit 后台看到; 然后注释掉你所说的代码, 也是可能正常发送 和 接收, 但是到后台 把 Exchanges 删除, 或把 Exchanges 和 Routing key 解绑, 只能发送, 接收不到
好像这些rabbitconfig类都没有什么作用,是我还缺少什么配置吗
我的报了这个异常 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
传输对象类型数据,该类需要实现Serializable,rabbitmq才能够正常传输。
支持一个,写的真好。由浅入深,容易理解
@Siwanper
@CHENBIN-SKR 请问一下:文章中的简单使用demo写完之后,运行抛了这个异常:org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused: connect,请问知道是什么原因吗?
连接被拒,是没有安装RabbitMQ吗?
我踩的坑-----本地的erlang和rabbitMQ版本有冲突;
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 用户的权限已经赋了,还是报这个问题
作者写的很好,在这里分享一个自己遇到的坑。浏览器默认访问端口是15672,而java链接访问的端口其实是5672,这个大家遇到链接不同问题的时候可以把端口换一下。
@chenIU 膜拜大神
膜拜大神 (试试@ )
一个发送者,发送了 10条,两个接收者,接收,总共接受的消息,没有10条,这是怎么回事?
赞
Work模式的“能者多劳”,请问这个应该怎么实现呢
今天试了下rabbitMq传递对象,好像不能直接传递,要序列化
@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试试
经过发现 Queue 名称不能使用大写,否则将出现一个 Listener method 'no match' threw exception
的异常。
生产者到交换机需要路由键,交换机到队列需要绑定键吧?
楼主 为什么我传其他对象就报错 传user对象就对了