redis消息队列发布订阅模式

公司项目中有redis作为缓存,现在需要引入消息队列模式,redis也可以做消息队列,于是想试试搭建,现在就用redis搭建一个消息队列发布订阅模式。

引入的jar包就一个

                
org.springframework.data
spring-data-redis
1.5.0.RELEASE

配置文件spring-redis.xml


    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd ">


   
   
   
     
   
    
     
     
     
     

 
   
 
    
   
   
   
   

    
   
       
   






   
       
       
   


   
       
       
           
           
               
                   
                       
                   

               

           

       

   

     

redis可以配一个服务器 也可以配redis池,我先用一个试试

生产消息类:

public class RedisDAOImpl implements RedisDAO {

    private RedisTemplate redisTemplate = null;

    public RedisDAOImpl() {
    }

    public void sendMessage(String channel, Serializable message) {
        redisTemplate.convertAndSend(channel, message);
    }

    public RedisTemplate getRedisTemplate() {
        return redisTemplate;
    }

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

}

消费消息类(代理监听)

public class MessageDelegateListenerImpl implements MessageDelegateListener {

    public void handleMessage(Serializable message) {
        //什么都不做,只输出
    if(message == null){
       System.out.println("null");
    } else if(message.getClass().isArray()){
       System.out.println(Arrays.toString((Object[])message));
    } else if(message instanceof List) {
       System.out.println(message);
    } else if(message instanceof Map) {
            System.out.println(message);
        } else {
       System.out.println(ToStringBuilder.reflectionToString(message));
    }
    }

}

测试验证类

public class PublishMessage {
private RedisDAOImpl redisDAO=null;  
 
    @SuppressWarnings("resource")
@Before  
    public void setUp() throws Exception {  
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-redis.xml");  
        redisDAO = (RedisDAOImpl) applicationContext.getBean("redisDAO");  

        }  

@Test
    public void testPublishMessage() throws Exception {
        String msg = "Hello, Redis!";
        redisDAO.sendMessage("java", msg); //发布字符串消息

        Message bean = new Message("123456","test");
        redisDAO.sendMessage("java", bean); //发布一个普通的javabean消息

        Integer[] values = new Integer[]{21341,123123,12323};
        redisDAO.sendMessage("java", values);  //发布一个数组消息
    }

}

是不是很简单呀。

我测试是跑起我自己工程,在其他需要产生消息的地方依赖注入

@Autowired

private RedisDAOImpl redisDAO; 

然后就可以调用发布消息类了

String message1 = "Hello, Redis!";
redisDAO.sendMessage("java", message1); //发布字符串消息
Message bean = new Message("123456","test");
redisDAO.sendMessage("java", bean); //发布一个普通的javabean消息
Integer[] values = new Integer[]{21341,123123,12323};

redisDAO.sendMessage("java", values);  //发布一个数组消息

消费端就可以接收到消息了。

你可能感兴趣的:(java语言)