redis发布、订阅
2017-07-07 16:34
405 查看
@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>
相关文章推荐
- redis 发布订阅
- Redis学习笔记8--Redis发布/订阅
- 使用nodejs+socket.io+redis订阅发布完成竞拍的过程
- Redis实现消息的发布/订阅
- redis发布、订阅
- Redis消息的发布/订阅
- Redis发布订阅和实现.NET客户端详解
- Redis的发布订阅及.NET客户端实现(九)
- redis 发布/订阅模式
- Redis消息发布与订阅
- 【Redis学习】:redis特性——多数据库、服务器命令、消息订阅与发布和事务
- redis 消息队列发布订阅模式spring boot实现
- Redis源码剖析(五)订阅与发布
- Python操作redis的订阅发布功能
- python的redis,实用订阅发布简单实用代码
- redis的发布订阅
- php redis pub/sub(Publish/Subscribe,发布/订阅的信息系统)之基本使用
- 六 redis学习笔记之发布订阅
- (一)redis发布订阅
- Redis - 发布和订阅