成都网站建设设计

将想法与焦点和您一起共享

JavaWeb项目为什么需要Redis做消息队列

本篇内容主要讲解“JavaWeb项目为什么需要redis做消息队列”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaWeb项目为什么需要Redis做消息队列”吧!

创新互联建站从2013年创立,先为夹江等服务建站,夹江等地企业,进行企业商务咨询服务。为夹江企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

摘要:

架构、分布式、日志队列,标题自己都看着唬人,其实就是一个日志收集的功能,只不过中间加了一个Redis做消息队列罢了。 为什么需要消息队列? 当系统中出现“生产“和“消费“的速度或稳定性等因素不一致的时候,就需要消息队列,作为抽象层,弥合双方的差异。

架构、分布式、日志队列,标题自己都看着唬人,其实就是一个日志收集的功能,只不过中间加了一个Redis做消息队列罢了。

JavaWeb项目为什么需要Redis做消息队列

为什么需要消息队列?

当系统中出现“生产“和“消费“的速度或稳定性等因素不一致的时候,就需要消息队列,作为抽象层,弥合双方的差异。

比如我们系统中常见的邮件、短信发送,把这些不需要及时响应的功能写入队列,异步处理请求,减少响应时间。

如何实现?

成熟的JMS消息队列中间件产品市面上有很多,但是基于目前项目的架构以及部署情况,我们采用Redis做消息队列。

为什么用Redis?

Redis中list数据结构,具有“双端队列”的特性,同时redis具有持久数据的能力,因此redis实现分布式队列是非常安全可靠的。

它类似于JMS中的“Queue”,只不过功能和可靠性(事务性)并没有JMS严格。Redis本身的高性能和"便捷的"分布式设计(replicas,sharding),可以为实现"分布式队列"提供了良好的基础。

提供者端

项目采用第三方redis插件spring-data-redis,不清楚如何使用的请自行谷歌或者百度。

redis.properties:

#redis 配置中心 
redis.host=192.168.1.180
redis.port=6379
redis.password=123456
redis.maxIdle=100 
redis.maxActive=300 
redis.maxWait=1000 
redis.testOnBorrow=true 
redis.timeout=100000

redis配置:

 
  
  
    
    
    
    
    
    
  
  
    
  

切面日志配置(伪代码):

/**
 * 系统日志,切面处理类
 * 创建者 小柒2012
 * 创建时间  2018年1月15日
 */
@Component
@Scope
@Aspect
public class SysLogAspect {
  @Autowired
  private RedisTemplate redisTemplate;
  //注解是基于swagger的API,也可以自行定义
  @Pointcut("@annotation(io.swagger.annotations.ApiOperation)")
  public void logPointCut() { 
  }
  @Around("logPointCut()")
  public Object around(ProceedingJoinPoint point) throws Throwable {
    Object result = point.proceed();
    //把日志消息写入itstyle_log频道
    redisTemplate.convertAndSend("itstyle_log","日志数据,自行处理");
    return result;
  }
}

消费者端

Redis配置:


  
  
    
    
    
    
    
    
  
   
     
       
     
     
       
     
  
  
  
  
  
    
    
  

监听接口:

public interface MessageDelegateListener {
  public void handleLog(Serializable message);
}

监听实现:

public class MessageDelegateListenerImpl implements MessageDelegateListener {
    @Override
    public void handleLog(Serializable message) {
      if(message == null){
        System.out.println("null");
      }else {
        //处理日志数据
      }
    }
}

到此,相信大家对“JavaWeb项目为什么需要Redis做消息队列”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


当前文章:JavaWeb项目为什么需要Redis做消息队列
文章路径:http://chengdu.cdxwcx.cn/article/pgsgdj.html