java使用redis作为消息队列

本文介绍了如何在Java中使用Redis作为消息队列,通过创建一个实现了`MessageListener`接口的类来监听Redis消息,并在Spring中配置该监听器。当在Redis客户端发布消息时,Java应用将接收到并处理这些消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         java使用redis作为消息队列








编写一个类用来侦听redis发送过来的消息事件,类需要实现MessageListener接口的MessageListener方法


package com.ch17.redisdemo;


import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.data.redis.core.RedisTemplate;


public class RedisMessageListenerDemo implements MessageListener {

private RedisTemplate  redisTemplate;


public RedisTemplate getRedisTemplate() {
return redisTemplate;
}


public void setRedisTemplate(RedisTemplate redisTemplate) {
this.redisTemplate = redisTemplate;
}


@Override
public void onMessage(Message msg, byte[] bytes) {
// TODO Auto-generated method stub

byte[] bodys =msg.getBody();

String body=(String)getRedisTemplate().getDefaultSerializer().deserialize(bodys);

byte[] channels=msg.getChannel();

String channel=(String)getRedisTemplate().getStringSerializer().deserialize(channels);

System.out.println("message from channel "+new String(bytes)+" is "+body);


}

}




配置spring,把接收消息到类发布到spring






   <bean id="redisMessageListenerDemo" class="com.ch17.redisdemo.RedisMessageListenerDemo" >


  
   <property name="redisTemplate" ref="redisTemplate"/>  
 </bean>






假设之前已经配置好RedisTemlate,配置一RedisMessageListenerContainer容器,主要的属性
有connectionFactory,taskExecutor,messageListeners


<bean id="topicContainer" class="org.springframework.data.redis.listener.RedisMessageListenerContainer">
 
 
  <property name="connectionFactory" ref="connectionFactory" />
  
  <property name="taskExecutor">
 
 
    <bean class="org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler">  
  
    <property name="poolSize" value="5" />
  
    </bean>
  </property>




  <property name="messageListeners">   
     <map>
       <entry key-ref="redisMessageListenerDemo">
       <bean class="org.springframework.data.redis.listener.ChannelTopic">
        <constructor-arg value="mychannel" />
       
       </bean>
       
       </entry>
     </map>
  
    </property>
  
 </bean>




启动应用程序,从redis客户发送一条消息


127.0.0.1:6379> publish  mychannel "aaahi"
(integer) 1
127.0.0.1:6379> publish  mychannel "aaahi"
(integer) 1
127.0.0.1:6379>  




java控制台输出如下


五月 05, 2018 12:15:04 下午 org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup start
信息: Starting beans in phase 2147483647
message from channel mychannel is aaahi



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值