Spring RedisTemplate操作-发布订阅操作(8)

@Component("sub")
public class Sub implements MessageListener{

    @Autowired
    private StringRedisSerializer stringRedisSerializer;

    /* (非 Javadoc)
     * Description:
     * @see org.springframework.data.redis.connection.MessageListener#onMessage(org.springframework.data.redis.connection.Message, byte[])
     */
    @Override
    public void onMessage(Message message, byte[] pattern) {
        byte[] body = message.getBody();//请使用valueSerializer
        byte[] channel = message.getChannel();
        String msg = (String)stringRedisSerializer.deserialize(body);
        String topic = (String)stringRedisSerializer.deserialize(channel);
        System.out.println("我是sub,监听"+topic+",我收到消息:"+msg);
    }

}
@Component("sub2")
public class Sub2 implements MessageListener{

    @Autowired
    private StringRedisSerializer stringRedisSerializer;

    @Autowired
    private JdkSerializationRedisSerializer jdkSerializationRedisSerializer;

    /* (非 Javadoc)
     * Description:
     * @see org.springframework.data.redis.connection.MessageListener#onMessage(org.springframework.data.redis.connection.Message, byte[])
     */
    @Override
    public void onMessage(Message message, byte[] pattern) {
        byte[] body = message.getBody();//请使用valueSerializer
        byte[] channel = message.getChannel();
        String msg = (String)stringRedisSerializer.deserialize(body);
        String topic = (String)stringRedisSerializer.deserialize(channel);
        System.out.println("我是sub2,监听"+topic+",我收到消息:"+msg);
    }

}
@Component("sub3")
public class Sub3 implements MessageListener{

    @Autowired
    private GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer;
    @Autowired
    private StringRedisSerializer stringRedisSerializer;

    @Autowired
    private JdkSerializationRedisSerializer jdkSerializationRedisSerializer;

    /* (非 Javadoc)
     * Description:
     * @see org.springframework.data.redis.connection.MessageListener#onMessage(org.springframework.data.redis.connection.Message, byte[])
     */
    @Override
    public void onMessage(Message message, byte[] pattern) {

        byte[] body = message.getBody();//请使用valueSerializer
        byte[] channel = message.getChannel();
        User u = jackson2JsonRedisSerializer.deserialize(body,User.class);  

        String topic = (String)stringRedisSerializer.deserialize(channel);
        System.out.println("我是sub3,监听"+topic+",我收到消息:"+u.getId()+"--"+u.getName());
    }

}
@Service
public class Pub {

    @Autowired
    @Resource(name="redisTemplate")
    private RedisTemplate<String, String> rt;

    @Autowired
    private GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer;

    @Autowired
    private JdkSerializationRedisSerializer jdkSerializationRedisSerializer;

    public void sendMessage(String channel, String message) {
        rt.convertAndSend(channel, message);
    }
    public void sendMessage(String channel, User user) {
        byte[] msg =jackson2JsonRedisSerializer.serialize(user);
        rt.convertAndSend(channel, new String(msg));  

//        rt.convertAndSend(channel, user);
    }

}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:conf/spring/spring*.xml")
public class PubSubTest {

    @Autowired
    private Pub pub;

    @Test
    public void test() throws InterruptedException{
        User u  = new User();
        u.setId("1");
        u.setName("wzg");
        pub.sendMessage("dddchannel", "我发消息了");
        pub.sendMessage("cccchannel", u);
        Thread.sleep(100);//jackson 反向序列化慢

    }

}
时间: 2024-11-12 00:46:06

Spring RedisTemplate操作-发布订阅操作(8)的相关文章

【spring boot】【redis】spring boot 集成redis的发布订阅机制

一.简单介绍 1.redis的发布订阅功能,很简单. 消息发布者和消息订阅者互相不认得,也不关心对方有谁. 消息发布者,将消息发送给频道(channel). 然后是由 频道(channel)将消息发送给对自己感兴趣的 消息订阅者们,进行消费. 2.redis的发布订阅和专业的MQ相比较 1>redis的发布订阅只是最基本的功能,不支持持久化,消息发布者将消息发送给频道.如果没有订阅者消费,消息就丢失了. 2>在消息发布过程中,如果客户端和服务器连接超时,MQ会有重试机制,事务回滚等.但是Red

RedisRepository封装—Redis发布订阅以及StackExchange.Redis中的使用

本文版权归博客园和作者本人吴双共同所有,转载请注明本Redis系列分享地址.http://www.cnblogs.com/tdws/tag/NoSql/ Redis Pub/Sub模式 基本介绍 Redis发布订阅—Pub/Sub模式或者说是观察者模式.我想大家即使没有使用过,也已经耳熟能详了. 先简单举例说明下应用场景,在场景中我们可以分析到其优势在哪. 比如你的线上应用应用,你想设置一个日志报警系统,当应用出现异常的时候,立马发送通知给你,可能是短信的形式,也可能是邮件的形式.当然如果只将报

redis(3)发布订阅

一.发布/订阅模式 在软件工程里面,发布/订阅是一种消息模式,这种模式旨在将消息发送者和消息接收者解耦.发送者不需要关心将消息发送给谁,接收者也不需要知道消息的发送者是谁.发送者将消息发布以后就结束动作,接收者可以订阅自己感兴趣的消息. 除了发布/订阅模式还有一种和它很类似的,消息队列,是一种典型的面向消息中间件的系统.许多消息系统都会同时支持发布/订阅和消息队列模型,例如Java Message Service(JMS) 参见:维基百科 二.redis的发布/订阅 我们从一个简单的示例开始,首

最简的发布订阅模式

发布订阅模式   1.  个人仅以最简单的发布订阅模式呈现该模式的思想,主要注重该思想的理解,同于多处理异步,切片事件等操作     发布订阅的理解(个人)     1.  主要原理是依次去获取调度中心的状态,整个数据是在调度中心获取的, 发布者和观察者之间不存在直接的联系 2.  观察者模式中却又包含者发布订阅模式, 有发布者(被观察者)和订阅者(观察者) 3. 发布订阅模式其实 就是发布者和订阅者解耦,在开发中经常遇到异步, 多层逻辑面向过程的处理方式,分解为多个处理的过程(面向切片(AOP

(二)Redis 笔记——发布&amp;订阅、事务、数据库操作

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

Spring Boot 和 Redis 常用操作

1    第4-2课:Spring Boot 和 Redis 常用操作 Redis 是目前使用最广泛的缓存中间件,相比 Memcached,Redis 支持更多的数据结构和更丰富的数据操作,另外 Redis 有着丰富的集群方案和使用场景,这一课我们一起学习 Redis 的常用操作. 1.1    Redis 介绍 Redis 是一个速度非常快的非关系数据库(Non-Relational Database),它可以存储键(Key)与 5 种不同类型的值(Value)之间的映射(Mapping),可

征服 Redis + Jedis + Spring (三)—— 列表操作【转】

一开始以为Spring下操作哈希表,列表,真就是那么土.恍惚间发现“stringRedisTemplate.opsForList()”的强大,抓紧时间恶补下. 相关链接: 征服 Redis 征服 Redis + Jedis 征服 Redis + Jedis + Spring (一)—— 配置&常规操作(GET SET DEL) 征服 Redis + Jedis + Spring (二)—— 哈希表操作(HMGET HMSET) 征服 Redis + Jedis + Spring (三)—— 列表

我的视频网站开通,第一个 ArcGIS文本文件,excel文件生成点操作发布,希望大家支持

网站地址:http://i.youku.com/gisoracle第一个学习视屏:ArcGIS文本文件,excel文件生成点操作http://v.youku.com/v_show/id_XNzM3NzIxODE2.html 我的视频网站开通,第一个 ArcGIS文本文件,excel文件生成点操作发布,希望大家支持,布布扣,bubuko.com

Redis_发布订阅(Spring Boot)

目录 前言 生产者和消费者 发布和订阅 Java实现 注意 转至 http://www.tianmaying.com/tutorial/springboot-redis-message 前言 利用Spring Data对Redis的支持来实现消息的发布订阅机制.使用StringRedisTemplate来发布一个字符串消息,同时基于MessageListenerAdapter使用一个POJO来订阅和响应该消息.Receiver类将会被注册为一个消息监听者时.给Receiver的构造函数通过@Au