【发布时间】:2019-07-08 09:40:28
【问题描述】:
版本:
Spring-cloud-stream-starter-rabbit --> 2.1.0.RELEASE
RabbitMQ --> 3.7.7
二郎 --> 21.1
(1) 我在 github 上创建了一个示例 mq-publisher-demo 和 mq-subscriber-demo 存储库以供参考。
内存警报激活时
发布者:能够发布消息。
订阅者:看起来订阅者正在批量接收消息,几乎没有延迟。
磁盘警报激活时
发布者:能够发布消息。
订阅者:看起来,在激活磁盘警报时订阅者没有收到消息。但是一旦警报被停用,订阅者就会收到所有消息。
消息是否在某处缓冲?
这是预期的行为吗? (因为我期待 RabbitMQ 将停止接收来自发布者的消息,并且一旦任何警报被激活,订阅者将永远不会收到任何后续消息。)
(2) Spring Cloud Stream document 如下所述。 这是否意味着上述行为? (避免死锁并保持发布者发布消息)
从 2.0 版开始,RabbitMessageChannelBinder 将 RabbitTemplate.userPublisherConnection 属性设置为 true,以便非事务性生产者避免消费者出现死锁,如果缓存连接因代理上的内存警报而被阻塞,就会发生这种情况。
(3) 我们是否也有类似的 Disk alarm 来避免死锁?
(4) 如果生产者的消息不会被RabbitMQ接受,那么是否可以从spring-cloud-stream向发布者抛出特定的异常(说警报被激活并且消息发布失败)?
我对spring-cloud-stream中的这些警报有点陌生,请帮助我理解清楚。谢谢。
【问题讨论】:
标签: rabbitmq spring-cloud-stream spring-rabbit