一、需求描述
1. 利用Redis做消息队列,实现一个异步化服务框架;如图:
2. 利用搭建好的框架实现异步化发送点赞信息和登录异常信息 。
二、具体diamante实现
首先搭建应用Redis做消息队列的异步化框架
1.准备
JedisAdapter.java
类中加上lpush 和 bpop的代码用来实现消息队列;加上setObject 和 getObject实现序列化与反序列的过程(将事件存入消息队列的时候要序列化,从队列中取出事件的时候需要反序列化):
public long lpush(String key, String value){ Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.lpush(key, value); }catch (Exception e){ logger.error("Jedis lpush 发生异常 " + e.getMessage()); return 0; }finally { if(jedis != null){ try { jedis.close(); }catch (Exception e){ logger.error("Jedis 关闭异常 " + e.getMessage()); } } } } public List<String> brpop(int timeout, String key){ Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.brpop(timeout, key); }catch (Exception e){ logger.error("Jedis brpop发生异常 " + e.getMessage()); return null; }finally { if (jedis != null){ try { jedis.close(); }catch (Exception e){ logger.error("Jedis 关闭异常" + e.getMessage()); } } } } //序列化 public void setObject(String key, Object object){ set(key, JSON.toJSONString(object)); } //反序列化 public <T> T getObject(String key, Class<T> clazz){ String value = get(key); if(value != null){ return JSON.parseObject(value, clazz); } return null; }