【发布时间】:2018-11-28 09:19:27
【问题描述】:
我们在项目中使用生菜。我们需要监控连接状态。
我知道 Lettuce 可以在连接断开时重新连接 Redis。但是有什么方法可以通知应用程序连接断开/接通?
谢谢, 史蒂文
【问题讨论】:
-
欢迎来到 Stack Overflow。第一个问题很好!
标签: connection lettuce
我们在项目中使用生菜。我们需要监控连接状态。
我知道 Lettuce 可以在连接断开时重新连接 Redis。但是有什么方法可以通知应用程序连接断开/接通?
谢谢, 史蒂文
【问题讨论】:
标签: connection lettuce
Lettuce 为连接事件提供了一个事件模型。您可以订阅EventBus 并对总线上发布的事件作出反应。有多个事件,但对于您的情况,您需要监听连接和断开的事件:
ConnectionActivatedEvent:逻辑连接已激活,可用于调度 Redis 命令(SSL 握手完成,收到激活响应前 PING)ConnectionDeactivatedEvent:逻辑连接已停用。内部处理状态被重置,isOpen() 标志设置为false。在接收到与传输相关的事件(例如 ConnectedEvent 和相应的 DisconnectedEvent)后会触发这两个事件。
以下示例说明了如何使用这些事件:
RedisClient client = RedisClient.create()
EventBus eventBus = client.getresources().eventBus();
Disposable subscription = eventBus.get().subscribe(e -> {
if (e instanceOf ConnectionActivatedEvent) {
// …
}
});
…
subscription.dispose();
client.shutdown();
请注意,事件是异步分派的。事件监听器中发生的任何事情都应该是非阻塞的(即,如果您需要调用阻塞代码,例如进一步的 Redis 交互,请将此任务卸载到专用的Thread)。
【讨论】:
ReconnectFailedEvent,但是没有成功重新连接的事件,尽管正确记录了成功重新连接的事实?