您的位置:首页 > 数据库 > Redis

redis发布、订阅

2017-07-07 16:34 232 查看
@Setter
public final class RedisUserLoginRegisterSubscribe extends JedisPubSub {
private static final Logger          log             = LoggerFactory.getLogger(REDIS_SUBPUB_LOGGER_NAME);
/**
* 订阅处理
*/
private final static ExecutorService executorService = Executors.newFixedThreadPool(32);

/**
* Redis 连接池
*/
private JedisPool                           jedisPool;
/**
* 用户注册订阅处理器
*/
private UserLoginRegisterSubscribeProcessor userRegisterSubscribeProcessor;

private boolean isSubscribe = true;

public void init() {
executorService.execute(() -> {
log.info("初始化用户注册订阅...");
while (isSubscribe) {
try (Jedis jedis = jedisPool.getResource()) {
jedis.subscribe(this, USER_REGISTER_PUBSUB_CHANNEL);
} catch (Exception ex) {
log.error(ex.getMessage(),ex);
}
try {
Thread.sleep(500);
} catch (InterruptedException e) {
}
}
});
}

public void destroy() {
log.info("用户注册订阅开始销毁处理...");
if (!executorService.isShutdown()) {
executorService.shutdown();
}
log.info("用户注册订阅销毁处理成功...");
}

@Override
public void onMessage(String channel, String message) {
executorService.execute(() -> {
log.info("收到消息 channel:{}, message:{}", channel, message);
UserLoginRegisterMessage userRegisterMessage = JSONObject.parseObject(message, UserLoginRegisterMessage.class);
userRegisterMessage.setChannel(channel);
userRegisterSubscribeProcessor.process(userRegisterMessage);
});
}

@Override
public void onPUnsubscribe(String pattern, int subscribedChannels) {
isSubscribe = false;
}

@Override
public void onUnsubscribe(String channel, int subscribedChannels) {
isSubscribe = false;
}
}

订阅处理接口

public interface UserLoginRegisterSubscribeProcessor {

/**
* 订阅接受到用户注册消息的处理
*
* @param message {@link UserLoginRegisterMessage}
*/
void process(UserLoginRegisterMessage message);
}

redis发布:

rs = jedis.publish(USER_REGISTER_PUBSUB_CHANNEL, JSON.toJSONString(userRegisterMessage));

订阅:

* <bean id="userRegisterSubscribeProcessor" class="...实现类"/>
*
* <bean id="redisUserRegisterSubscribe" init-method="init" destroy-method="destroy"
*         class="com.***.usercore.sdk.pubsub.RedisUserLoginRegisterSubscribe">
*     <property name="jedisPool" ref="jedisPool"/>
*     <property name="userRegisterSubscribeProcessor" ref="userRegisterSubscribeProcessor"/>
* </bean>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: