Redis-发布订阅及MQ选型对比

1.使用maven导入相关的jar包

    
            redis.clients
            jedis
            2.7.2
        

2. 发布者

package com.tbs.redis;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import com.tbs.common.entity.Order;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;
public class RedisPublish {
    public static void main(String[] args) throws IOException{  
        System.out.println("发布者 ");
          Jedis jRedis = new Jedis("localhost");  
          jRedis.publish("JRedisChat","my name is chenLong");  
//          jRedis.publish("JRedisChat1","Hello chenLong!");  
          Order o=new Order();// 一个实体类..
          ByteArrayOutputStream byt=new ByteArrayOutputStream();
          ObjectOutputStream obj=new ObjectOutputStream(byt);
          obj.writeObject(o);
          byte[] bytes=byt.toByteArray();
          // 可写入byte和字符串.
          jRedis.publish("JRedisChat1".getBytes(),bytes); 
    }  
}

3.订阅者

package com.tbs.redis;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;
public class RedisSub1 {
    public static void main(String[] args){  
        System.out.println("订阅者..1");
        final Jedis jRedis = new Jedis("localhost");  
        JedisPubSub jedisPubSub=new JedisPubSub() {  
            @Override  
            public void onMessage(String channel, String message) {  
                // 执行订阅消息
                super.onMessage(channel, message);
                //终止订阅
                super.unsubscribe();
                System.out.println(message);
            }  
        };  
        jRedis.subscribe(jedisPubSub,"JRedisChat1");  
    }  
}

4.Redis发布订阅与ActiveMQ的比较

(1)ActiveMQ支持多种消息协议,包括AMQP,MQTT,Stomp等,并且支持JMS规范,但Redis没有提供对这些协议的支持; 
(2)ActiveMQ提供持久化功能,但Redis无法对消息持久化存储,一旦消息被发送,如果没有订阅者接收,那么消息就会丢失; 
(3)ActiveMQ提供了消息传输保障,当客户端连接超时或事务回滚等情况发生时,消息会被重新发送给客户端,Redis没有提供消息传输保障。 
总之,ActiveMQ所提供的功能远比Redis发布订阅要复杂,毕竟Redis不是专门做发布订阅的,但是如果系统中已经有了Redis,并且需要基本的发布订阅功能,就没有必要再安装ActiveMQ了,因为可能ActiveMQ提供的功能大部分都用不到,而Redis的发布订阅机制就能满足需求。

MQ选型对比文档:

这里写图片描述

综合选择RabbitMq

你可能感兴趣的:(NoSql数据库)