使用Spring-Redis实现消息的发布/订阅

Redis服务器可以实现简单的消息“发布/订阅”服务,下面对spring-redis实现做一个说明

 

spring-redis使用RedisMessageListenerContainer进行消息监听,客户程序需要自己实现MessageListener,并以指定的topic注册到RedisMessageListenerContainer,

这样,在指定的topic上如果有消息,RedisMessageListenerContainer便会通知该MessageListener。

 

下面是在spring配置文件中配置spring-redis:

 

<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxTotal" value="600"></property>
        <property name="maxIdle" value="300"></property>
        <property name="minIdle" value="10"></property>
        <property name="maxWaitMillis" value="2000"></property>

        <property name="testOnBorrow" value="true"></property>
        <property name="testOnReturn" value="true"></property>
    </bean>

    <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <property name="hostName" value="127.0.0.1"/>
        <property name="port" value="6379"/>
        <property name="poolConfig" ref="jedisPoolConfig"></property>
        <property name="timeout" value="5000"></property>
        <property name="usePool" value="true"></property>
    </bean>
    <!-- Redis Template -->
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
        <property name="connectionFactory" ref="jedisConnectionFactory"/>
    </bean>

    <bean id="redisMsgListener" class="my.test.listener.RedisMessageListener">
        <property name="redisTemplate" ref="redisTemplate"/>
    </bean>

 

上面例子中,最后两个bean的配置是实现发布/订阅服务的关键,RedisMessageListener是自己写的实现了org.springframework.data.redis.connection.MessageListener的业务类,

并以“topic123” 这个topic注册到RedisMessageListenerContainer。RedisMessageListenerContainer在消息到达后负责通知MessageListener。下面是RedisMessageListener的代码:

class RedisMessageListener implements MessageListener {

    @Autowired
    RedisTemplate redisTemplate;

    RedisSerializer serializer

    @Override
    void onMessage(Message message, byte[] pattern) {
        serializer = redisTemplate.getValueSerializer()
        String messageStr = serializer.deserialize(message.body)
        println("message received:" + messageStr)
    }
}

这样,应用启动时,消息的订阅方(subscriber),就注册好了。这时候只要使用一个简单的程序,模拟publisher,向指定topic发布消息,RedisMessageListener就可以接收到消息,

spring-redis的写法是这样:

redisTemplate.convertAndSend("topic123","hello there!")

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值