首先我这边的应用场景是和别的商家做接口对接,他会用redis不断的推送一些消息过来,我这边进行接收并做相应的处理,其中用的就是redis的发布订阅模式。
由于小编这边是ssm框架,本事的配置文件使用的是jedis,所以我这边的做法是:
1.redis服务器的ip和端口配置在自己的redis配置文件中
2.编写订阅消息的类,通过实现JedisPubSub类,然后实现里面的方法
3.编写通过渠道进行redis的消息订阅,然后将其设置成项目启动就加载的状态
4.(channel)渠道是双方共同约定好的,叫一样的即可,通过获取该渠道就可以获取下面的消息
5.为了保证实现异步执行,用多线程来保证异步订阅消息
6.具体代码
@Component
public class RedisCeshiController implements ApplicationListener {
@Autowired
private JedisPool jedisPool;
@Override
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
if (contextRefreshedEvent.getApplicationContext().getParent() == null) {//保证只执行一次
try {
start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void start(){
Thread thread = new Thread(new RedisRun()) ;
thread.start();
}
class RedisRun implements Runnable{
@Override
public void run() {
Jedis jedis = jedisPool.getResource();
MessageSubscriber messageSubscriber = new MessageSubscriber();
jedis.subscribe(messageSubscriber,CommonConstants.CHANNEL);
}
}
package com.thinkgem.jeesite.app.controller;
import redis.clients.jedis.JedisPubSub;
public class MessageSubscriber extends JedisPubSub {
//订阅初始化
@Override
public void onMessage(String channel, String message) {
System.out.println(channel+"="+message);
}
//取消订阅
@Override
public void onPMessage(String pattern, String channel, String message) {
}
//订阅初始化
@Override
public void onSubscribe(String channel, int subscribedChannels) {
}
//取消订阅
@Override
public void onUnsubscribe(String channel, int subscribedChannels) {
}
//取消模式方式的订阅
@Override
public void onPUnsubscribe(String pattern, int subscribedChannels) {
}
//处理消息订阅模式
@Override
public void onPSubscribe(String pattern, int subscribedChannels) {
}
}