当前位置: 首页 > 知识库问答 >
问题:

使用Java spring的Redis发布/订阅

闽涵蓄
2023-03-14

我使用Java创建Redis Pub/Sub,其中包含单个主题和单个侦听器,如thank:

这是我在MVCConfiguer中的bean:

@Bean
    MessageListenerAdapter messageListener() {
        return new MessageListenerAdapter(redisMsgHandler);
    }

    @Bean
    public RedisMessageListenerContainer redisMessageListenerContainer() {
        RedisMessageListenerContainer mlc = new RedisMessageListenerContainer();
        mlc.setConnectionFactory(lettuceConnectionFactory());
        mlc.addMessageListener(messageListener(), topic());
        return mlc;
    }

    @Bean
    ChannelTopic topic() {
        return new ChannelTopic("pubsub:queue");
    }

这就是我接收消息的地方,请不要使用这个RedisMsghandler类来MvcConfigrer

public class RedisMsgHandler implements MessageListener {

    @Override
    public void onMessage(Message message, byte[] bytes) {
   //impl goes here
    }
} 

我的主要目标是创建多个主题和多个听众,如RedisMsgHandler,请告诉我如何做。

我不喜欢创建大量在MessageListener上实现的类,也不喜欢为每个主题创建大量的bean

共有1个答案

花阳秋
2023-03-14

设法像这样修复它:

@Bean
public RedisMessageListenerContainer redisMessageListenerContainer() {
    RedisMessageListenerContainer mlc = new RedisMessageListenerContainer();

    mlc.setConnectionFactory(lettuceConnectionFactory());
    mlc.addMessageListener(new MessageListenerAdapter(redisMsgHandler), 
                           new ChannelTopic("pubsub:queue");


    mlc.addMessageListener(new MessageListenerAdapter(redisMsgHandlerAnother), 
                           new ChannelTopic("pubsub:Otherqueue");

    return mlc;
}
 类似资料:
  • 主要内容:发布/订阅流程,常用命令汇总,基本命令应用Redis PubSub 模块又称发布订阅者模式,是一种消息传递系统,实现了消息多播功能。发布者(即发送方)发送消息,订阅者(即接收方)接收消息,而用来传递消息的链路则被称为  channel。在 Redis 中,一个客户端可以订阅任意数量的 channel(可译为频道)。 消息多播:生产者生产一次消息,中间件负责将消息复制到多个消息队列中,每个消息队列由相应的消费组进行消费,这是分布式系统常用的

  • 问题内容: 当前,我正在使用node.js和redis来构建应用程序,使用redis的原因是由于发布/订阅功能。该应用程序只是在用户进入用户或不在房间时通知管理员。 由于我想听join和disjoin事件,我的问题是我是否应该使用两个redisclient来听这两个事件,例如 或者只是使用一个redisclient来监听和分离回调中的逻辑 我知道这两种方式都是可行的,但是我不知道人们在哪种情况下会

  • 问题内容: 我正在尝试使用nodejs和node_redis构建一个通用的发布/订阅服务器,该服务器接收带有通道名称的浏览器的请求,并以该通道也已发布的任何数据作为响应。为此,我使用了来自浏览器的长轮询请求,并通过在通道上收到消息时发送响应来处理这些请求。 对于每个新请求,都会创建一个对象来订阅该频道(如果且仅当该频道不存在时)。 这是处理订阅渠道的最佳方法,还是还有其他更直观的方法? 问题答案:

  • 我有一个问题非常困扰我。Redis发布/订阅功能的实际用途是什么?我只能想到通过TCP(本地或分布式)进行进程间通信,但其他的就不多了。 有人能证明我错了吗。

  • Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。 Redis 客户端可以订阅任意数量的频道。 下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2、client5 和 client1 之间的关系: 当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个

  • 目前,我正在开发一个分布式测试执行和报告系统。我计划将Redis PUB/SUB用作消息队列和消息分发系统。 我是Redis的新手,所以我试着阅读尽可能多的文档,并尝试着使用它。最重要的主题之一是高可用性。正如我所说,我不是专家,但我知道可能的选择——使用Sentinel、复制、集群等。 我不清楚的是Pub/Sub功能和HA选项是如何相互关联的。使用Redis构建可靠消息传递系统的最佳实践是什么?