版本:
Spring-cloud-stream-starter-rabbit-> 2.1.0.RELEASE
RabbitMQ-> 3.7.7
Erlang-> 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中的这些警报还是很陌生,请帮助我清楚理解。谢谢。
答案 0 :(得分:1)
消息是否被缓存在某处?
是的,设置资源警报后,消息将发布到网络缓冲区中。
答案 1 :(得分:0)
最好在Rabbitmq-users Google网上论坛上询问有关RabbitMQ本身(以及Spring使用的Java客户端)的行为的问题;那就是RabbitMQ工程师的聚会地点。
(2)Spring Cloud Stream文档如下所述。这是否表示上述行为?
进行此更改是为了使生产者被禁止生产,消费者仍然可以消费。
(4)如果RabbitMQ不接受生产者的消息,那么是否有可能从spring-cloud-stream中向发布者抛出特定的异常(例如,警报已激活并且消息发布失败)?
默认情况下发布是异步的;您可以启用交易(这可能会大大降低性能;或者在生产者上启用错误,如果启用发布者确认并返回,则会在错误通道上收到异步消息。