6.7. 话题(订阅分发)

Redisson的分布式话题RTopic)、反射式(Reactive)和RxJava2标准的接口。

  1. RTopic topic = redisson.getTopic("anyTopic");
  2. topic.addListener(SomeObject.class, new MessageListener<SomeObject>() {
  3. @Override
  4. public void onMessage(String channel, SomeObject message) {
  5. //...
  6. }
  7. });
  8. // 在其他线程或JVM节点
  9. RTopic topic = redisson.getTopic("anyTopic");
  10. long clientsReceivedMessage = topic.publish(new SomeObject());

在Redis节点故障转移(主从切换)或断线重连以后,所有的话题监听器将自动完成话题的重新订阅。

6.7.1. 模糊话题

Redisson的模糊话题RPatternTopic对象可以通过正式表达式来订阅多个话题。除了同步接口外,还提供了异步(Async)、反射式(Reactive)和RxJava2标准的接口。

  1. // 订阅所有满足`topic1.*`表达式的话题
  2. RPatternTopic topic1 = redisson.getPatternTopic("topic1.*");
  3. int listenerId = topic1.addListener(Message.class, new PatternMessageListener<Message>() {
  4. @Override
  5. public void onMessage(String pattern, String channel, Message msg) {
  6. Assert.fail();
  7. }
  8. });

在Redis节点故障转移(主从切换)或断线重连以后,所有的模糊话题监听器将自动完成话题的重新订阅。