Java 未接收RabbitMQ阻止的连接通知

Java 未接收RabbitMQ阻止的连接通知,java,rabbitmq,amqp,spring-amqp,Java,Rabbitmq,Amqp,Spring Amqp,我正在尝试在AMQPCachingConnectionFactory上注册一个BlockedListener,以处理连接进入/离开阻塞状态的通知。不幸的是,我从未收到任何事件 在我的Java客户端中,我正在使用: org.springframework.amqp:springrabbit:jar:2.1.11.RELEASE com.rabbitmq:amqp客户端:jar:5.4.3 我的兔子服务器正在使用docker映像rabbitmq:3-management,它映射到3.8.2和Er

我正在尝试在AMQP
CachingConnectionFactory
上注册一个
BlockedListener
,以处理连接进入/离开阻塞状态的通知。不幸的是,我从未收到任何事件

在我的Java客户端中,我正在使用:

  • org.springframework.amqp:springrabbit:jar:2.1.11.RELEASE
  • com.rabbitmq:amqp客户端:jar:5.4.3
我的兔子服务器正在使用docker映像
rabbitmq:3-management
,它映射到
3.8.2
Erlang 22.2.4

这是我用来连接到rabbit并注册侦听器的代码片段

com.rabbitmq.client.ConnectionFactory rmqConnectionFactory = new com.rabbitmq.client.ConnectionFactory();
rmqConnectionFactory.useNio();
rmqConnectionFactory.setHost(rabbitmqHost);
rmqConnectionFactory.setUsername(rabbitmqUsername);
rmqConnectionFactory.setPassword(rabbitmqPassword);
rmqConnectionFactory.setPort(rabbitmqPort);
rmqConnectionFactory.setVirtualHost(rabbitmqVirtualHost);

CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory(rmqConnectionFactory);
cachingConnectionFactory.addConnectionListener(new ConnectionListener() {
  @Override
  public void onCreate(Connection connection) {
    log.info("New connection: {}", connection);
    connection.getDelegate().addBlockedListener(new BlockedListener() {
      @Override
      public void handleBlocked(String s) {
        log.warn("Connection {} entered a blocked state with message {}", connection, s);
      }
      @Override
      public void handleUnblocked() {
        log.info("Connection {} left a blocked state", connection);
      }
    });
  }
});
我从中获取日志条目

log.info("New connection: {}", connection);
但不是来自

log.warn("Connection {} entered a blocked state with message {}", connection, s);


我缺少什么?

我正在docker中使用RabbitMQ server 3.7,但我可以看到我的
RabbitMQ\u amqp1\u 0
未启用。报告说:

我们引入了AMQP 0-9-1协议扩展,在该扩展中,代理在连接被阻止时向客户端发送connection.blocked方法,在连接被取消阻止时发送connection.unblocked方法

也许您安装了一个
rabbitmq\u amqp0\u 9
插件?我认为协议
1\u 0
0\u 9
是不同的

root@ffb673602565:/# rabbitmq-plugins list
Listing plugins with pattern ".*" ...
 Configured: E = explicitly enabled; e = implicitly enabled
 | Status: * = running on rabbit@ffb673602565
 |/
[  ] rabbitmq_amqp1_0                  3.7.11
[  ] rabbitmq_auth_backend_cache       3.7.11
[  ] rabbitmq_auth_backend_http        3.7.11
[  ] rabbitmq_auth_backend_ldap        3.7.11
[  ] rabbitmq_auth_mechanism_ssl       3.7.11
[  ] rabbitmq_consistent_hash_exchange 3.7.11
[  ] rabbitmq_event_exchange           3.7.11
[  ] rabbitmq_federation               3.7.11
[  ] rabbitmq_federation_management    3.7.11
[  ] rabbitmq_jms_topic_exchange       3.7.11
[E*] rabbitmq_management               3.7.11
[e*] rabbitmq_management_agent         3.7.11
[  ] rabbitmq_mqtt                     3.7.11
[  ] rabbitmq_peer_discovery_aws       3.7.11
[  ] rabbitmq_peer_discovery_common    3.7.11
[  ] rabbitmq_peer_discovery_consul    3.7.11
[  ] rabbitmq_peer_discovery_etcd      3.7.11
[  ] rabbitmq_peer_discovery_k8s       3.7.11
[  ] rabbitmq_random_exchange          3.7.11
[  ] rabbitmq_recent_history_exchange  3.7.11
[  ] rabbitmq_sharding                 3.7.11
[  ] rabbitmq_shovel                   3.7.11
[  ] rabbitmq_shovel_management        3.7.11
[  ] rabbitmq_stomp                    3.7.11
[  ] rabbitmq_top                      3.7.11
[  ] rabbitmq_tracing                  3.7.11
[  ] rabbitmq_trust_store              3.7.11
[e*] rabbitmq_web_dispatch             3.7.11
[  ] rabbitmq_web_mqtt                 3.7.11
[  ] rabbitmq_web_mqtt_examples        3.7.11
[  ] rabbitmq_web_stomp                3.7.11
[  ] rabbitmq_web_stomp_examples       3.7.11

原来是这样;然而,上述代码/设置是正确的;Rabbit不会发送事件,直到您尝试在该连接上发布消息。

现在请告诉我们,您如何阻止该连接,让框架启动该
阻止的
事件:我找到了一些方法来触发该条件;我发现最简单(最直接)的方法是在容器
rabbitmqctl set\u vm\u memory\u high\u watermark 0.01
(其中
0.01
足够小,可以小于当前内存使用量)内执行此命令
root@ffb673602565:/# rabbitmq-plugins list
Listing plugins with pattern ".*" ...
 Configured: E = explicitly enabled; e = implicitly enabled
 | Status: * = running on rabbit@ffb673602565
 |/
[  ] rabbitmq_amqp1_0                  3.7.11
[  ] rabbitmq_auth_backend_cache       3.7.11
[  ] rabbitmq_auth_backend_http        3.7.11
[  ] rabbitmq_auth_backend_ldap        3.7.11
[  ] rabbitmq_auth_mechanism_ssl       3.7.11
[  ] rabbitmq_consistent_hash_exchange 3.7.11
[  ] rabbitmq_event_exchange           3.7.11
[  ] rabbitmq_federation               3.7.11
[  ] rabbitmq_federation_management    3.7.11
[  ] rabbitmq_jms_topic_exchange       3.7.11
[E*] rabbitmq_management               3.7.11
[e*] rabbitmq_management_agent         3.7.11
[  ] rabbitmq_mqtt                     3.7.11
[  ] rabbitmq_peer_discovery_aws       3.7.11
[  ] rabbitmq_peer_discovery_common    3.7.11
[  ] rabbitmq_peer_discovery_consul    3.7.11
[  ] rabbitmq_peer_discovery_etcd      3.7.11
[  ] rabbitmq_peer_discovery_k8s       3.7.11
[  ] rabbitmq_random_exchange          3.7.11
[  ] rabbitmq_recent_history_exchange  3.7.11
[  ] rabbitmq_sharding                 3.7.11
[  ] rabbitmq_shovel                   3.7.11
[  ] rabbitmq_shovel_management        3.7.11
[  ] rabbitmq_stomp                    3.7.11
[  ] rabbitmq_top                      3.7.11
[  ] rabbitmq_tracing                  3.7.11
[  ] rabbitmq_trust_store              3.7.11
[e*] rabbitmq_web_dispatch             3.7.11
[  ] rabbitmq_web_mqtt                 3.7.11
[  ] rabbitmq_web_mqtt_examples        3.7.11
[  ] rabbitmq_web_stomp                3.7.11
[  ] rabbitmq_web_stomp_examples       3.7.11