Redis--订阅/发布与SpringBoot整合

1 发布者发布消息到不同的频道,订阅者接收来自不同频道的消息。
1.1 设计到Redis的publish和subscribe,publish向指定的端口推送消息,subscribe监听指定频道的消息。
Linu下举例如下:
监听端:
这里写图片描述
发送端:
这里写图片描述
上图中监听名为third的频道,使用publis指令在third中推送消息,可以看到在监听端接收到了发送的消息。
1.2 java代码实现:
向频道推送消息:

Jedis jedis = new Jedis("localhost");
		jedis.publish("one","hello");
		jedis.close();

监听端口:
这里写图片描述

Java相关:
添加依赖:

<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
			<version>2.9.0</version>
		</dependency>

向频道发送消息代码:

public static void publishMessage() {
		Jedis jedis = new Jedis("192.168.209.129", 6379);
		jedis.publish("channel.test", "德玛西亚万岁!!!");
		System.out.println("向频道发送消息成功。。。");
	}

订阅频道代码:

public static void subscribeChannel() {
		Jedis jedis = new Jedis("192.168.209.129", 6379);
		jedis.subscribe(new JedisPubSub() {
			@Override
			public void onMessage(String channel, String message) {
				// TODO Auto-generated method stub
				System.out.println("接收通过频道发送的消息--》"+message);
				super.onMessage(channel, message);
			}
		}, "channel.test");
	}

先启动订阅的代码,然后再启动发布消息的代码。接收端会一直阻塞,只有取消订阅才不会阻塞。
运行情况:
这里写图片描述
与SpringBoot整合

@Autowired
	private RedisConnectionFactory redisConnectionFactory;

	@Autowired
	private MessageListener redisMessageListener;

	/**
	 * 处理线程
	 */
	private ThreadPoolTaskScheduler taskScheduler;

	/**
	 * 运行线程等待处理Redis消息
	 * @return
	 */
	@Bean
	public ThreadPoolTaskScheduler initTaskScheduler(){
		if(this.taskScheduler != null){
			return this.taskScheduler;
		}
		this.taskScheduler=new ThreadPoolTaskScheduler();
		this.taskScheduler.setPoolSize(20);
		return this.taskScheduler;
	}

	/**
	 * 话题与消息处理类绑定
	 * @return
	 */
	@Bean
	public RedisMessageListenerContainer redisMessageListenerContainer(){
		RedisMessageListenerContainer redisMessageListenerContainer=new RedisMessageListenerContainer();
		redisMessageListenerContainer.setConnectionFactory(this.redisConnectionFactory);
		redisMessageListenerContainer.setTaskExecutor(taskScheduler);
		Topic topic=new ChannelTopic("topic1");
		redisMessageListenerContainer.addMessageListener(this.redisMessageListener,topic);
		return redisMessageListenerContainer;
	}

消息处理类实现MessageListener接口

/**
 * @Author: ShipTang
 * @Date: 2019/1/29 16:20
 */
@Component
public class RedisMessageListener implements MessageListener {
    @Override
    public void onMessage(Message message, byte[] pattern) {
        //消息体
        String body=new String(message.getBody());
        //渠道名称
        String topic=new String(pattern);
        System.out.println(body);
        System.out.println(topic);
    }
}

参考:http://www.runoob.com/redis/redis-pub-sub.html
http://blog.csdn.net/u011734144/article/details/51782085
《深入浅出SpringBoot 2.X》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值