英文:
Not Receiving RabbitMQ Blocked Connection Notifications
问题
我尝试在一个AMQP的CachingConnectionFactory
上注册一个BlockedListener
来处理连接进入/离开Blocked状态的通知,但不幸的是我从未收到任何事件。
在我的Java客户端中,我使用了以下依赖:
org.springframework.amqp:spring-rabbit:jar:2.1.11.RELEASE
com.rabbitmq:amqp-client:jar:5.4.3
我的Rabbit服务器使用的是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);
或者
log.info("Connection {} left a blocked state", connection);
我漏掉了什么吗?
英文:
I'm attempting to register a BlockedListener
on an AMQP CachingConnectionFactory
to process notifications of connections entering/leaving a Blocked state. Unfortunately I'm never receiving any events.
In my Java client I'm using:
org.springframework.amqp:spring-rabbit:jar:2.1.11.RELEASE
com.rabbitmq:amqp-client:jar:5.4.3
My Rabbit server is using the docker image rabbitmq:3-management
which maps to 3.8.2
and Erlang 22.2.4
This is the code snippet I'm using to connect to rabbit and register the listener.
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);
}
});
}
});
I get log entries from
log.info("New connection: {}", connection);
But not from
log.warn("Connection {} entered a blocked state with message {}", connection, s);
or
log.info("Connection {} left a blocked state", connection);
What am I missing?
答案1
得分: 1
所以事实证明;上述的代码/设置是 正确 的,然而;Rabbit在你尝试在该连接上发布消息之前不会发送该事件。
英文:
So it turns out; the above code/setup is correct however; Rabbit doesn't send the event until you attempt to publish a message on that connection.
答案2
得分: 0
我正在使用Docker中的RabbitMQ服务器3.7版本,但我发现我的 rabbitmq_amqp1_0
未启用。文档 表示:
> 我们引入了一个AMQP 0-9-1协议扩展,在此扩展中,当连接被阻塞时,代理向客户端发送 connection.blocked
方法,当连接解除阻塞时发送 connection.unblocked
。
也许你安装了一个 rabbitmq_amqp0_9
插件?我认为协议 1_0
和 0_9
是不同的。
root@ffb673602565:/# rabbitmq-plugins list
使用模式 ".*" 列出插件...
已配置:E = 显式启用;e = 隐式启用
| 状态:* = 在 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
英文:
I'm using RabbitMQ server 3.7 in docker, but I can see that my rabbitmq_amqp1_0
is not enabled. The documentation says:
> We have introduced an AMQP 0-9-1 protocol extension in which the broker sends to the client a connection.blocked method when the connection gets blocked, and connection.unblocked when it is unblocked.
Perhaps you install a rabbitmq_amqp0_9
plugin? I think the protocols 1_0
and 0_9
are different.
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
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论